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

  • 相关阅读:
    oracle数据段详解
    监听静态注册与动态注册
    Oracle网络相关概念与常用配置文件
    pycharm社区版安装及遇到的问题
    强化学习-K摇臂赌博机
    概率图模型
    半监督学习
    卷积神经网络
    递归神经网络
    玻尔兹曼机及其相关模型
  • 原文地址:https://www.cnblogs.com/flipped/p/13896906.html
Copyright © 2020-2023  润新知