在构建/运行时将参数列表传递给 docker

Nim*_*shn 6 git docker dockerfile

我正在编写一个 dockerfile,我想在其中下载一组不断变化的 git repos:repo1、repo2、repo3。我应该如何在映像构建或容器运行时向 dockerfile 提供这些 url/字符串?

我知道可以使用ARG指令传递参数并使用

docker build --build-arg <var-name>=<value>

但是当我有一个任意长度的 args 列表时会发生什么?

非常感谢。

小智 1

镜像构建时的 dockerfile

这可能不是最好的主意,但您最终会得到环境变量并在 dockerfile 中使用它们。

容器运行时间

恕我直言,这是一个更好的主意。如果您知道该命令需要输入,则可以将其添加到 dockerfile 中:

ENTRYPOINT ["git","-c","/tmp"]
CMD ["--help"]
Run Code Online (Sandbox Code Playgroud)

我们对 git 有一个“硬编码”参数,也就是说,每次运行这个 docker 容器时,参数-c /tmp都会传递给 git。我用这个作为例子,以防您需要它,但这不是必需的,并且ENTRYPOINT ["git"]可以正常工作。

在这种情况下,CMD 是“默认”。在这种情况下,我们使用“--help”作为帮助告诉用户他们需要添加参数的一种方式。

您可以将 CMD 设置为默认存储库,或者您想要的任何内容。

恕我直言,ENTRYPOINT 和 CMD 应始终结合使用。

如果您好奇为什么使用 ENTRYPOINT [](这是 Docker 的首选形式),这来自 docker 文档:

注意:与 shell 形式不同,exec 形式不调用命令 shell。这意味着不会发生正常的 shell 处理。例如,CMD [ "echo", "$HOME" ] 不会对 $HOME 进行变量替换。如果您想要 shell 处理,则可以使用 shell 形式或直接执行 shell,例如:CMD [ "sh", "-c", "echo $HOME" ]。当使用 exec 形式并直接执行 shell 时,就像 shell 形式一样,是 shell 进行环境变量扩展,而不是 docker。

来源