V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
pydiff
V2EX  ›  问与答

dockerfile 单行 env 设置多个值问题

  •  
  •   pydiff · 2021-10-28 18:00:37 +08:00 · 1248 次点击
    这是一个创建于 908 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在写 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,都没有找到有用的解决方案,请大佬们指点下

    14 条回复    2021-10-28 22:41:55 +08:00
    777777
        1
    777777  
       2021-10-28 18:04:54 +08:00
    少了 && ,\ 改成&&\
    pydiff
        2
    pydiff  
    OP
       2021-10-28 18:14:09 +08:00
    @777777 不行,直接报语法错误,或者你写一个我试试
    lululau
        3
    lululau  
       2021-10-28 18:22:07 +08:00
    leafre
        4
    leafre  
       2021-10-28 19:07:30 +08:00 via Android
    多个 ENV 逼死强迫症的故事
    pydiff
        5
    pydiff  
    OP
       2021-10-28 19:26:24 +08:00
    @lululau 没用,不信你可以试试的
    pydiff
        6
    pydiff  
    OP
       2021-10-28 19:28:03 +08:00
    @lululau 它是你写多个时,有些可以,有些则丢失了,所以我也很纳闷,估计是需要某种格式的
    pydiff
        7
    pydiff  
    OP
       2021-10-28 19:28:48 +08:00
    @leafre 有点吧,不想写多个 ENV,不好看
    yzbythesea
        8
    yzbythesea  
       2021-10-28 19:32:19 +08:00
    直接套个启动脚本在里面赋值环境变量
    pydiff
        9
    pydiff  
    OP
       2021-10-28 19:35:47 +08:00
    @yzbythesea 这个是可以,不过我现在也想知道我单行设置多个 ENV 不生效究竟是什么原因
    killva4624
        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"
    pydiff
        11
    pydiff  
    OP
       2021-10-28 20:29:25 +08:00
    @killva4624 是的,但是这种还是不够问美观
    jim9606
        12
    jim9606  
       2021-10-28 21:49:30 +08:00
    我不明白多行 ENV 有什么问题,怎么不美观了?
    RUN 写成一大块是为了不在层之间遗留没用的中间文件,减少镜像体积,但 ENV 没这问题啊。
    pydiff
        13
    pydiff  
    OP
       2021-10-28 21:52:21 +08:00
    @jim9606 是的,除了 RUN ADD COPY,其他的都不会增加 layer
    mritd
        14
    mritd  
       2021-10-28 22:41:55 +08:00 via iPhone
    我看着写多行的才更难受😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5358 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 07:28 · PVG 15:28 · LAX 00:28 · JFK 03:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.