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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM