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
就不會被解析為變量,而是當作字符串。