
在写 dockerfile 的时候遇到了一个写单行 env 设置多个值,其中有值会丢失,如
FROM alpine:3.13.6 COPY jre/ /usr/local/jre/openjre8-302/ ENV JAVA_HOME="/usr/loal/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 日 少了 && ,\ 改成&&\ |
3 lululau 2021 年 10 月 28 日 |
4 leafre 2021 年 10 月 28 日 via Android 多个 ENV 逼死强迫症的故事 |
8 yzbythesea 2021 年 10 月 28 日 直接套个启动脚本在里面赋值环境变量 |
9 pydiff OP @yzbythesea 这个是可以,不过我现在也想知道我单行设置多个 ENV 不生效究竟是什么原因 |
10 killva4624 2021 年 10 月 28 日 一个从测试结果出发的结论:自定义的 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 日 我不明白多行 ENV 有什么问题,怎么不美观了? RUN 写成一大块是为了不在层之间遗留没用的中间文件,减少镜像体积,但 ENV 没这问题啊。 |
14 mritd 2021 年 10 月 28 日 via iPhone 我看着写多行的才更难受 |