Docker 具有入口点变量扩展和 CMD 参数的容器
Docker container with entrypoint variable expansion and CMD parameters
我想创建一个 Docker 图像作为可执行文件,用户将令牌作为环境变量传递给该可执行文件。可执行文件具有用户应通过 dockers CMD 传递的子命令(考虑通过 Env 进行身份验证的 git)。
但是,Docker 不会将 CMD 附加到入口点。
我的 Docker 文件的相关部分如下所示:
ENTRYPOINT ["/bin/sh", "-c", "/usr/bin/mycmd --token=$MY_TOKEN"]
CMD ["pull", "stuff"]
因此,如果此容器在没有任何 CMD 覆盖的情况下执行并且 secret
作为 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 被忽略 - 无论我是在启动期间覆盖它还是在 Docker 文件中设置它。
如指定的那样 in the docker documentation,您正在指定一个调用 shell 的入口点(因此不是 shell 形式,而是 exec 形式)。参数传递给 shell(因此被忽略);只有 shell 中的命令很重要。将入口点调用切换到:
后,您会发现问题已解决
ENTRYPOINT ["usr/bin/mycmd", "--token=$MY_TOKEN"]
强烈建议不要在入口点调用 shell,只有当您希望避免图像用户将自定义参数附加到您的入口点时才有用。
互联网见! :)
使用 /bin/sh -c "script"
语法,-c
参数之后的任何内容都将成为脚本的参数。作为 /bin/sh 脚本的一部分,您可以使用 [=14=]
和 $@
联系他们:
ENTRYPOINT ["/bin/sh", "-c", "exec /usr/bin/mycmd --token=$MY_TOKEN [=10=] $@"]
CMD ["pull", "stuff"]
请注意,您还可以将入口点更改为添加到运行 exec /usr/bin/mycmd --token=$MY_TOKEN "$@"
的图像的 shell 脚本,并使用 docker 执行该 shell 脚本执行语法:
ENTRYPOINT ["/entrypoint.sh"]
我想创建一个 Docker 图像作为可执行文件,用户将令牌作为环境变量传递给该可执行文件。可执行文件具有用户应通过 dockers CMD 传递的子命令(考虑通过 Env 进行身份验证的 git)。 但是,Docker 不会将 CMD 附加到入口点。 我的 Docker 文件的相关部分如下所示:
ENTRYPOINT ["/bin/sh", "-c", "/usr/bin/mycmd --token=$MY_TOKEN"]
CMD ["pull", "stuff"]
因此,如果此容器在没有任何 CMD 覆盖的情况下执行并且 secret
作为 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 被忽略 - 无论我是在启动期间覆盖它还是在 Docker 文件中设置它。
如指定的那样 in the docker documentation,您正在指定一个调用 shell 的入口点(因此不是 shell 形式,而是 exec 形式)。参数传递给 shell(因此被忽略);只有 shell 中的命令很重要。将入口点调用切换到:
后,您会发现问题已解决ENTRYPOINT ["usr/bin/mycmd", "--token=$MY_TOKEN"]
强烈建议不要在入口点调用 shell,只有当您希望避免图像用户将自定义参数附加到您的入口点时才有用。
互联网见! :)
使用 /bin/sh -c "script"
语法,-c
参数之后的任何内容都将成为脚本的参数。作为 /bin/sh 脚本的一部分,您可以使用 [=14=]
和 $@
联系他们:
ENTRYPOINT ["/bin/sh", "-c", "exec /usr/bin/mycmd --token=$MY_TOKEN [=10=] $@"]
CMD ["pull", "stuff"]
请注意,您还可以将入口点更改为添加到运行 exec /usr/bin/mycmd --token=$MY_TOKEN "$@"
的图像的 shell 脚本,并使用 docker 执行该 shell 脚本执行语法:
ENTRYPOINT ["/entrypoint.sh"]