在构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