我正在学习 Docker 并面临将一个 env 变量的值替换为另一个 env 变量的问题。
这是我的 Dockerfile
FROM ubuntu
ENV var_env=Tarun
ENV command="echo Hello $var_env"
CMD ["sh","-c","echo Hello $var_env"]
Run Code Online (Sandbox Code Playgroud)
现在,在使用标签名称“exp”构建它之后,然后
sudo docker run -e "var_env=New Env Value" exp
Run Code Online (Sandbox Code Playgroud)
它给了我正确的输出
Hello New Env Value
Run Code Online (Sandbox Code Playgroud)
但是,如果我看到通过执行关联的环境变量
sudo docker run -e "var_env=New Env Value" exp env
Run Code Online (Sandbox Code Playgroud)
它给了我这个输出:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=138aa8852d8d
var_env=New Env Value
command=echo Hello Tarun
HOME=/root
Run Code Online (Sandbox Code Playgroud)
其中,var_env
环境变量的值被改变,而command
环境变量的值保持不变。
我需要找到一种方法,以便如果我var_env
通过上述命令更改环境变量的值,它也会更新var_env
环境变量中的环境变量的值command
。
供参考:https : //docs.docker.com/engine/reference/builder/#environment-replacement
选项 1:在容器启动时
您可以使用包装器脚本来创建具有所需继承的环境变量。这是一个简单的包装脚本
包装器.sh
#!/bin/bash
# prep your environement variables
export command="echo Hello $var_env"
# run your actual command
echo "Hello $command"
Run Code Online (Sandbox Code Playgroud)
您的 dockerfile 需要进行调整才能使用它
FROM ubuntu
COPY ./wrapper.sh .
ENV var_env=Tarun
ENV command="echo Hello $var_env"
CMD ["sh","-c","./wrapper.sh"]
Run Code Online (Sandbox Code Playgroud)
选项 2:构建期间
您可以通过使用不同的构建参数重建映像来存档此文件。让您的 dockerfile 保持几乎相同:
FROM ubuntu
ARG var_env=Tarun
ENV command="echo Hello $var_env"
CMD ["sh","-c","echo Hello $var_env"]
Run Code Online (Sandbox Code Playgroud)
并运行
docker build -t test .
Run Code Online (Sandbox Code Playgroud)
这将为您提供 dockerfile 中定义的默认映像,但您的var_env不再是环境变量。
接下来我们跑
docker build -t test --build-arg var_env="New Env Value" .
Run Code Online (Sandbox Code Playgroud)
这只会使您定义构建参数的行中的 docker 缓存失效。因此,请将 ARG 的定义保持在其使用位置附近,以便最大限度地发挥 docker build 的缓存功能。
您可以在此处找到有关构建参数的更多信息:https ://docs.docker.com/engine/reference/commandline/build/
归档时间: |
|
查看次数: |
2870 次 |
最近记录: |