为什么在编译Docker镜像的时候一直报JAVA_HOME未配置

Viewed 35

Dockerfile

使用官方Java镜像作为基础镜像

FROM openjdk:17-jdk-slim

设置环境变量

ENV JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64 "
ENV PATH="/opt/apache-doris/fe/bin:$PATH"

更新软件包列表并安装MySQL客户端

RUN apt-get update &&
apt-get install -y default-mysql-client &&
apt-get clean &&
rm -rf /var/lib/apt/lists/*

下载软件至镜像内,可根据需要替换

#ADD ./resource/apache-doris-3.0.0-bin-x64.tar.gz /opt/
#RUN tar -xzf /opt/apache-doris-3.0.0-bin-x64.tar.gz -C /opt/ && \
 #   mkdir -p /opt/apache-doris && \
  #  mv /opt/apache-doris-3.0.0-bin-x64/fe /opt/apache-doris/fe
COPY ./resource/apache-doris-3.0.0-bin-x64.tar.gz /opt/
RUN tar -xzf /opt/apache-doris-3.0.0-bin-x64.tar.gz -C /opt/ && \
    mkdir -p /opt/apache-doris && \
    mv /opt/apache-doris-3.0.0-bin-x64/fe /opt/apache-doris/fe && \
    rm -rf /opt/apache-doris-3.0.0-bin-x64.tar.gz

列出根目录和/opt目录下的文件

RUN ls -l /
RUN ls -l /opt/

添加初始化脚本

ADD ./resource/init_fe.sh /opt/apache-doris/fe/bin/init_fe.sh
RUN chmod 755 /opt/apache-doris/fe/bin/init_fe.sh

设置工作目录

WORKDIR /opt/apache-doris/fe

添加 JAVA_HOME 到 fe.conf 文件

RUN echo "JAVA_HOME=${JAVA_HOME}" >> /opt/apache-doris/fe/conf/fe.conf

启动Doris FE

ENTRYPOINT ["/opt/apache-doris/fe/bin/init_fe.sh"]

fe.conf也配置了JAVA_HOME

2024-10-29T12:44:11+00:00 [Note] [Entrypoint]: Ready to start CURRENT_FE!
The JAVA_HOME environment variable is not set correctly
This environment variable is required to run this program
Note: JAVA_HOME should point to a JDK and not a JRE
You can set JAVA_HOME in the fe.conf configuration file
root@a80c9f07dab0:/opt/apache-doris/fe# cd conf/
root@a80c9f07dab0:/opt/apache-doris/fe/conf# cat fe.conf 
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

#####################################################################
## The uppercase properties are read and exported by bin/start_fe.sh.
## To see all Frontend configurations,
## see fe/src/org/apache/doris/common/Config.java
#####################################################################

CUR_DATE=`date +%Y%m%d-%H%M%S`

# Log dir
LOG_DIR = ${DORIS_HOME}/log

# For jdk 8
JAVA_OPTS="-Djavax.security.auth.useSubjectCredsOnly=false -Xss4m -Xmx8192m -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:$LOG_DIR/log/fe.gc.log.$CUR_DATE -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=50M -Dlog4j2.formatMsgNoLookups=true"

# For jdk 17, this JAVA_OPTS will be used as default JVM options
JAVA_OPTS_FOR_JDK_17="-Djavax.security.auth.useSubjectCredsOnly=false -Xmx8192m -Xms8192m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR -Xlog:gc*:$LOG_DIR/fe.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens java.base/jdk.internal.ref=ALL-UNNAMED"

# Set your own JAVA_HOME
# JAVA_HOME=/path/to/jdk/

##
## the lowercase properties are read by main program.
##

# store metadata, must be created before start FE.
# Default value is ${DORIS_HOME}/doris-meta
# meta_dir = ${DORIS_HOME}/doris-meta

# Default dirs to put jdbc drivers,default value is ${DORIS_HOME}/jdbc_drivers
# jdbc_drivers_dir = ${DORIS_HOME}/jdbc_drivers

http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
arrow_flight_sql_port = -1

# Choose one if there are more than one ip except loopback address. 
# Note that there should at most one ip match this list.
# If no ip match this rule, will choose one randomly.
# use CIDR format, e.g. 10.10.10.0/24 or IP format, e.g. 10.10.10.1
# Default value is empty.
# priority_networks = 10.10.10.0/24;192.168.0.0/16

# Advanced configurations 
# log_roll_size_mb = 1024
# INFO, WARN, ERROR, FATAL
sys_log_level = INFO
# NORMAL, BRIEF, ASYNC
sys_log_mode = NORMAL
# sys_log_roll_num = 10
# sys_log_verbose_modules = org.apache.doris
# audit_log_dir = $LOG_DIR
# audit_log_modules = slow_query, query
# audit_log_roll_num = 10
# meta_delay_toleration_second = 10
# qe_max_connection = 1024
# qe_query_timeout_second = 300
# qe_slow_log_ms = 5000
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 
root@a80c9f07dab0:/opt/apache-doris/fe/conf#

1 Answers

1、/usr/lib/jvm/java-17-openjdk-amd64是jdk根目录?是否有权限访问
2、如果用export的方式是否可行,参考:

export JAVA_HOME=/opt/jdk-17.0.1