gpt4 book ai didi

Dockerfile ENV 变量替换为另一个 ENV 变量

转载 作者:行者123 更新时间:2023-12-02 18:00:13 30 4
gpt4 key购买 nike

我正在学习 Docker 并面临将一个 env 变量的值替换为另一个 env 变量的问题。

这是我的 Dockerfile

FROM ubuntu

ENV var_env=Tarun

ENV command="echo Hello $var_env"

CMD ["sh","-c","echo Hello $var_env"]


现在,在使用标签名称“exp”构建它之后,然后
sudo docker run -e  "var_env=New Env Value" exp

它给了我正确的输出
Hello New Env Value

但是,如果我看到通过执行关联的环境变量
sudo docker run -e  "var_env=New Env Value" exp env

它给了我这个输出:
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

其中, 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"

您的 dockerfile 需要进行调整才能使用它
FROM ubuntu
COPY ./wrapper.sh .
ENV var_env=Tarun
ENV command="echo Hello $var_env"
CMD ["sh","-c","./wrapper.sh"]

选项 2:在构建期间

您可以通过使用不同的构建参数重建您的图像来存档。
让您的 dockerfile 保持几乎相同:
FROM ubuntu
ARG var_env=Tarun
ENV command="echo Hello $var_env"
CMD ["sh","-c","echo Hello $var_env"]

并运行
docker build -t test .

这为您提供了 dockerfile 中定义的默认图像,但您的 var_env 不再是环境变量。

接下来我们运行
docker build -t test --build-arg var_env="New Env Value" .

这将仅从您定义构建参数的行中使 docker 缓存无效。因此,将 ARG 的定义保持在靠近使用位置的位置,以最大限度地发挥 docker build 的缓存功能。

您可以在此处找到有关构建参数的更多信息: https://docs.docker.com/engine/reference/commandline/build/

关于Dockerfile ENV 变量替换为另一个 ENV 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58481490/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com