Docker容器具有入口变量扩展和CMD参数

前端之家收集整理的这篇文章主要介绍了Docker容器具有入口变量扩展和CMD参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想创建一个Docker Image,作为一个可执行文件,用户将一个令牌作为一个环境变量传递给它.可执行文件具有用户应通过停靠点CMD(通过Env进行认证来考虑git)的子命令.
然而,Docker没有将CMD附加到入口点.
Dockerfile的相关部分如下所示:

ENTRYPOINT ["/bin/sh","-c","/usr/bin/mycmd --token=$MY_TOKEN"]
CMD ["pull","stuff"]

所以如果这个容器执行没有任何CMD覆盖和秘密作为MY_TOKEN变量,我会期望

mycmd --token=secret pull stuff

被执行.如果用户启动具有覆盖的容器,例如

docker run -it -e MY_TOKEN=secret myimage push junk

我会期望的

mycmd --token=secret push junk

被执行.然而,如上所述,只有mycmd –token = secret被执行,CMD被忽略 – 无论我在启动时是否覆盖它,或者在Dockerfile中设置它.

最佳答案
使用/ bin / sh -c“脚本”语法,-c参数之后的任何内容都将成为脚本的参数.您可以使用$0和$@与他们的/ bin / sh脚本一起达到它们:

ENTRYPOINT ["/bin/sh","exec /usr/bin/mycmd --token=$MY_TOKEN $0 $@"]
CMD ["pull","stuff"]

请注意,您还可以将您的entrypoint更改为添加到运行exec /usr/bin/mycmd –token = $MY_TOKEN“$@”的映像的shell脚本,并使用docker的exec语法执行该shell脚本:

ENTRYPOINT ["/entrypoint.sh"]

猜你在找的Docker相关文章