dockerfile CMD ENTRYPOINT 命令中的环境变量
1.先看一下例子
现有环境变量
JAVA_OPTS=-Xms125m -Xmx256m -Dspring.profiles.active=test
CMD命令
CMD sleep 30 && java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar xxx.jar
执行后期望
# 延时30s执行后面一个命令,环境变量的占位符能生效
CMD sleep 30 && java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar xxx.jar # 期望 JAVA_OPTS 替换 java -Xms125m -Xmx256m -Dspring.profiles.active=test -Djava.security.egd=file:/dev/./urandom -jar xxx.jar
实际结果
# 延时30s执行后面一个命令,环境变量的占位符不能生效
CMD sleep 30 && java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar xxx.jar #没有替换 java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar xxx.jar
2.解决方法:
a. 写个脚本,cmd 直接跑脚本
b. cmd/entrypoint sh -c
这两种方式 pid 不是 1
3. entrypoint 使用 环境变量的方法
再 Dockerfile 中定义 环境变量 (如果 k8s 在 deploymnet 也可以定义)
pid 还是 1
FROM registry.cn-shanghai.aliyuncs.com/dzcx/java:8-cst-command ENV JAR_NAME=JAR_NAME_VAR RUN_PROFILE=RUN_PROFILE_VAR PROJECT_PORT=8080 JAVA_MAX_MEMORY=LIMIT_MEMORY_VAR COPY target/JAR_NAME_VAR /JAR_NAME_VAR #COPY scripts/deploy.sh /deploy.sh COPY scripts/entrypoint.sh /entrypoint.sh RUn chmod +x entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]
用一个脚本启动 ENTRYPOINT
#!/bin/sh exec java -jar -Xms${JAVA_MAX_MEMORY} -Xmx${JAVA_MAX_MEMORY} -Dserver.port=${PROJECT_PORT} ${JAR_NAME} --server.port=${PROJECT_PORT} --spring.profiles.active=${RUN_PROFILE}
0顶
0 踩
共 0 条评论