Dockerfile 通过 ARG 设置 ENV 无效的原因

ARG 设置 ENV 无效的原因:ARG 的作用范围

Dockerfile 如下:

ARG BASE_IMAGE
ARG VARIABLE=test
FROM ${BASE_IMAGE}
ENV VARIABLE=$VARIABLE

但是在打包的镜像起的容器里 echo $VARIABLE 却是空。

原来是因为:

ARG 指令有生效范围,如果在 FROM 指令之前指定,那么只能用于 FROM 指令中。

因此需要修改 Dockerfile 为:

ARG BASE_IMAGE
FROM ${BASE_IMAGE}
ARG VARIABLE=test
ENV VARIABLE=$VARIABLE

使用 docker run 打印环境变量

  • 正确方法:

    docker run -it --rm golang bash -c "echo \$VARIABLE"
    
  • 错误方法1

    这样会打印出本地的环境变量,而不是镜像的环境变量:

    export $VARIABLE=local
    docker run -it --rm golang echo $VARIABLE
    local
    

    可以通过 inspect 检查:

    docker inspect container_id
    

    可以看到

    "Env": [
        ...
        "VARIABLE=test"
    ],
    "Cmd": [
        "echo",
        "local"
    ],
    

    这里的 $VARIABLE 就不会被解析为变量,而是当作字符串。

  • 错误方法2
    这样会打印 $VARIABLE 字符串:

    docker run -it --rm golang echo \$VARIABLE
    $VARIABLE
    

    通过 inspect 检查,可以看到:

    "Env": [
        ...
        "VARIABLE=test"
    ],
    "Cmd": [
        "echo",
        "$VARIABLE"
    ],
    

    这里的 $VARIABLE 就不会被解析为变量,而是当作字符串。

posted @ 2020-10-29 15:16  水郁  阅读(2404)  评论(1编辑  收藏  举报
……