FROM openjdk:11-jre-slim
WORKDIR /app
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# 僅聲明環(huán)境變量(不固定掛載點(diǎn))
ENV JAVA_OPTS=""
ENV APP_PARAMS=""
ENV LOG_DIR="/var/log/app"
ENV CONFIG_DIR="/config"
ENV DATA_DIR="/data"
# 通過環(huán)境變量創(chuàng)建目錄
RUN mkdir -p ${LOG_DIR} ${CONFIG_DIR} ${DATA_DIR}
# 使用環(huán)境變量作為掛載路徑
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app/app.jar ${APP_PARAMS} > ${LOG_DIR}/app.log 2>&1"]
啟動(dòng)示例
docker run -d
-e LOG_DIR="/custom/logs"
-e CONFIG_DIR="/custom/config"
-e DATA_DIR="/custom/data"
-v /host/logs:/custom/logs
-v /host/config:/custom/config
-v /host/data:/custom/data
your-image
關(guān)鍵改進(jìn)點(diǎn):
用環(huán)境變量替代硬編碼的VOLUME聲明
所有路徑通過-e參數(shù)動(dòng)態(tài)指定
-v掛載與-e環(huán)境變量保持同步
RUN階段自動(dòng)創(chuàng)建環(huán)境變量指定的目錄
這種方法完全解耦了掛載路徑和Dockerfile,實(shí)現(xiàn)真正的動(dòng)態(tài)配置