zoukankan      html  css  js  c++  java
  • 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 就不会被解析为变量,而是当作字符串。

  • 相关阅读:
    oralce索引的使用
    oracle中connect by prior的使用
    oracle函数listagg使用
    oracle函数的使用
    redis高可用集群搭建
    Node.js安装及环境配置之Windows篇
    Repeater 合并单元格
    c#16进制转浮点数单精度类型
    EF Core 实体映射表或视图
    docker 构建filebeat镜像
  • 原文地址:https://www.cnblogs.com/flipped/p/13896906.html
Copyright © 2011-2022 走看看