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
就不会被解析为变量,而是当作字符串。