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

我正在写一个dockerfile,我想要下载一套不断变化的git仓库:repo1,repo2,repo3。 在图像构build或容器运行时,我应该如何将这些URL /string提供给dockerfile?

我知道可以通过使用ARG指令和使用的参数

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

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

非常感谢。

docker文件在图像构build

这可能不是最好的想法,但是你最终会得到envvariables,并在dockerfile中使用它们。

集装箱运行时间

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

 ENTRYPOINT ["git","-c","/tmp"] CMD ["--help"] 

我们有一个“硬编码”的参数为git,也就是说,每次我们运行这个docker容器的参数-c /tmp传递给git。 我使用这个作为例子,以防万一你需要它,但它不是必需的,并且ENTRYPOINT ["git"]将工作得很好。

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

你可以使CMD成为默认的回购,或者任何你想要的。

恕我直言,入口点和CMD应始终结合使用。

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

注意:与shellforms不同,execforms不会调用命令shell。 这意味着正常的shell处理不会发生。 例如,CMD [“echo”,“$ HOME”]不会在$ HOME上进行variablesreplace。 如果你想要shell处理,那么要么使用shell的forms,要么直接执行一个shell,例如:CMD [“sh”,“-c”,“echo $ HOME”]。 当使用exec表单并直接执行一个shell时,就像在shell表单的情况下一样,shell是在执行环境variables扩展,而不是docker。

资源

build立时间

我能想到的最好的是通过逗号分隔的列表:

  docker build --build-arg repos=repo1,repo2 

Docker不会将它parsing为列表,但是在构build过程中运行的脚本可以将string拆分成一个列表。

运行

如果你使用ENTRYPOINT定义你的命令,那么ENTRYPOINT任何尾随参数都会附加到入口点命令。

所以如果你的Dockerfile包含:

  ENTRYPOINT echo hello 

然后:

  docker run myimage glorious world 

将运行命令

  echo hello glorious world