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
就不会被解析为变量,而是当作字符串。
┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆