FROM openjdk:11-jre-slim
WORKDIR /app
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# 仅声明环境变量(不固定挂载点)
ENV JAVA_OPTS=""
ENV APP_PARAMS=""
ENV LOG_DIR="/var/log/app"
ENV CONFIG_DIR="/config"
ENV DATA_DIR="/data"
# 通过环境变量创建目录
RUN mkdir -p ${LOG_DIR} ${CONFIG_DIR} ${DATA_DIR}
# 使用环境变量作为挂载路径
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app/app.jar ${APP_PARAMS} > ${LOG_DIR}/app.log 2>&1"]
启动示例
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
关键改进点:
用环境变量替代硬编码的VOLUME声明
所有路径通过-e参数动态指定
-v挂载与-e环境变量保持同步
RUN阶段自动创建环境变量指定的目录
这种方法完全解耦了挂载路径和Dockerfile,实现真正的动态配置