在写 dockerfile 的时候遇到了一个写单行 env 设置多个值,其中有值会丢失,如
FROM alpine:3.13.6
COPY jre/ /usr/local/jre/openjre8-302/
ENV JAVA_HOME="/usr/local/jre/openjre8-302"
ENV PATH="$PATH:$JAVA_HOME/bin"
ENV CLASSPATH=".:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
则运行容器时输入 java 正常.如果我这样写
FROM alpine:3.13.6
COPY jre/ /usr/local/jre/openjre8-302/
ENV JAVA_HOME="/usr/local/jre/openjre8-302" \
PATH="$PATH:$JAVA_HOME/bin" \
CLASSPATH=".:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
在容器中输入 java 则提示命令不存在,在输入 env 查看发现 PATH 这个环境变量丢失了. 因为我要部署的程序要设置的环境变量比较多,所以想通过一个 ENV 而不是多个来写 dockerfile, 我查了百度跟 google,都没有找到有用的解决方案,请大佬们指点下
1
777777 2021-10-28 18:04:54 +08:00
少了 && ,\ 改成&&\
|
3
lululau 2021-10-28 18:22:07 +08:00
|
4
leafre 2021-10-28 19:07:30 +08:00 via Android
多个 ENV 逼死强迫症的故事
|
8
yzbythesea 2021-10-28 19:32:19 +08:00
直接套个启动脚本在里面赋值环境变量
|
9
pydiff OP @yzbythesea 这个是可以,不过我现在也想知道我单行设置多个 ENV 不生效究竟是什么原因
|
10
killva4624 2021-10-28 19:58:58 +08:00 2
一个从测试结果出发的结论:自定义的 ENV 必须在下一行 ENV 才能引用。
比如你改成这样就可以了: ENV JAVA_HOME="/usr/local/jre/openjre8-302" ENV PATH="$PATH:$JAVA_HOME/bin" \ CLASSPATH=".:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar" |
11
pydiff OP @killva4624 是的,但是这种还是不够问美观
|
12
jim9606 2021-10-28 21:49:30 +08:00
我不明白多行 ENV 有什么问题,怎么不美观了?
RUN 写成一大块是为了不在层之间遗留没用的中间文件,减少镜像体积,但 ENV 没这问题啊。 |
14
mritd 2021-10-28 22:41:55 +08:00 via iPhone
我看着写多行的才更难受😂
|