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

  • 相关阅读:
    二叉树线索化。。。
    如何通过指针访问虚函数表,并且调用里面的方法
    进程间通信IPC
    什么时候该用assert
    高并发服务端分布式系统设计概要(上)
    C语言读写文件
    Linux 与 BSD 有什么不同?
    extern "C" 使用
    C语言字符数组的定义与初始化
    Linux守护进程
  • 原文地址:https://www.cnblogs.com/flipped/p/13896906.html
Copyright © 2011-2022 走看看