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

摘要:
错误方法2将打印$VARIABLE字符串:dockerrun-it-rmgolangecho$VARIABLE$VARIABLE通过检查,您可以看到:“Env”:[…”VARIABLE=test“],“Cmd”:[“echo”,“$VARIALE”],其中$VARIARIABLE不会作为变量解析,而是作为字符串解析。

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

免责声明:文章转载自《Dockerfile 通过 ARG 设置 ENV 无效的原因》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TableView之表头、表尾,区头、区尾!大型网站技术架构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Thinkphp6笔记三:开启.env

默认安装后的根目录有一个.example.env环境变量示例文件,你可以直接改成.env文件后进行修改。 获取env参数:控制器调用envuse thinkfacadeEnv;echo Env::get('database.username');Env::get('PATHINFO_PATH'); // 获取环境变量 如果不存在则使用默认值rootEnv:...

Docker学习5-Dockerfile编写自己的镜像

前言 Dockerfile 可以自定义编写镜像,简单来说就类似写脚本,shell脚本应该接触不少了,就是一个执行后就完成了。 当然做好的镜像也可以传到镜像仓库,就好像github上面一样存储,一个命令就能照搬下来安装。 一、简介 相信不少朋友会问,为何docker run 一下python就停止了呢?(那执行完了不停止干什么?) 还有为什么我的pip安装,...

Allure 安装及使用

linux下安装方法Allure requires Java 8 or highernpm install -g allure-commandline --save-dev(如果npm不能使用需要单独安装) 增加软连接 windows下安装 Allure工具环境1、安装JDK1.8+2、安装Allure下载Allure的zip安装包,戳这里解压到all...

allure安装与环境变量配置

                                                                         allure安装与环境变量配置 一、下载allure文件    1、下载地址:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-comman...

CentOS Shell 脚本备份和重启 JAR 服务

1、JAR 备份 Shell 脚本shaolinTemple-mobile_backup.sh: #!/bin/sh # author hapday # date 2020-07-27 echo "为备份后的 JAR 文件名添加日期和时间标识:" date +%Y-%m-%d-%H-%M-%S MOBILE_HOME=/usr/local/shaoli...

(转载)linux中shell变量

(转载)http://blog.csdn.net/zahuopuboss/article/details/8633891 为使shell编程更有效,系统提供了一些shell变量。shell变量可以保存诸如路径名、文件名或者一个数字这样的变量名。shell将其中任何设置都看做文本字符串。有两种变量,本地和环境。严格地说可以有4种,但其余两种是只读的,可以认为...