gpt4 book ai didi

docker - 在Dockerfile CMD指令中有条件地设置标志

转载 作者:行者123 更新时间:2023-12-02 19:24:24 25 4
gpt4 key购买 nike

在我的dockerfile文件的末尾,我有一个CMD指令:

CMD ['my_script.sh', '--debug']

但是我希望 debug标志是可选的,在构建时选择。我对此的解决方案是使用build arg,即
ARG DEBUG=""
CMD ["my_script.sh", "$DEBUG"]

然后用
docker image build --build-arg='--debug' ...etc

要么
docker image build ...etc

使用第一个选项,镜像可以成功构建,但是在运行容器时出现以下错误:
Invalid option '$DEBUG'

双引号必须导致命令从字面上使用字符串 $DEBUG。但是更改内容以使 $DEBUG用单引号引起来或不加引号
/bin/sh: [my_script.sh,: No such file or directory

最后,使用
CMD ./my_script.sh $DEBUG

成功运行容器,但忽略 $DEBUG
我做错什么了吗?有更好的解决方案吗?有什么解决办法吗?

最佳答案

问题在于$DEBUG仅在构建时才知道。因此,如果您希望在容器运行时解决它,则可以从DEBUG ENV中设置ARG变量作为一种解决方法:

ARG DEBUG=""
ENV DEBUG ${DEBUG}
CMD ["sh", "-c", "my_script.sh $DEBUG"]

这样,您将拥有一个名为 DEBUG的环境变量,该变量将具有 ARG DEBUG的值,并且可以从cmd访问此环境变量。

但是我认为您只能使用环境变量-不需要为此建立arg。然后,您可以使用 -e选项将环境变量值传递给容器。例如,空的 DEBUG env变量:
docker container run -e DEBUG image_name

或带有值:
docker container run -e DEBUG=--debug image_name

关于docker - 在Dockerfile CMD指令中有条件地设置标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57365076/

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