我正在编写一个dockerfile,我想下载一个更改的git repos:repo1,repo2,repo3。 我应该如何在图像构建或容器运行时将这些url /字符串提供给dockerfile?
我知道可以使用ARG
指令并使用
docker build --build-arg <var-name>=<value>
但是当我有一个任意长度的args列表时会发生什么?
非常感谢。
答案 0 :(得分:0)
我能想到的最好的方法是传入一个以逗号分隔的列表:
docker build --build-arg repos=repo1,repo2
Docker无法将此解析为一个列表,但在构建期间运行的脚本可能会将字符串拆分为一个列表。
如果使用ENTRYPOINT
定义命令,则docker run
的所有尾随参数都会附加到入口点命令。
所以如果您的Dockerfile包含:
ENTRYPOINT echo hello
然后:
docker run myimage glorious world
...将运行命令
echo hello glorious world
答案 1 :(得分:0)
图像构建时的dockerfile
这可能不是最好的主意,但你最终会得到env变量并使用dockerfile中的变量。
容器运行时间
这是,恕我直言,一个更好的主意。如果您知道命令需要输入,可以在dockerfile中添加:
<?php
header('Content-Type: application/json');
$folder = $_POST['folder'];
echo json_encode($folder);
?>
我们为git提供了一个“硬编码”参数,也就是说,每次运行此docker容器时,参数ENTRYPOINT ["git","-c","/tmp"]
CMD ["--help"]
都会传递给git。我以此为例,以备您需要时使用,但不是必需的,-c /tmp
可以正常使用。
在这种情况下,CMD是“默认”。在这种情况下,我们使用“--help”作为帮助用户添加参数的一种方式。
您可以将CMD设为默认仓库,或任何您想要的。
恕我直言,ENTRYPOINT和CMD应始终结合使用。
如果您对使用ENTRYPOINT [](这是根据Docker的首选形式)感到好奇,这来自docker docs:
注意:与shell表单不同,exec表单不会调用命令 贝壳。这意味着不会发生正常的shell处理。对于 例如,CMD [“echo”,“$ HOME”]不会进行变量替换 $ HOME。如果你想要shell处理,那么要么使用shell形式,要么使用 直接执行shell,例如:CMD [“sh”,“ - c”,“echo $ HOME” ]。当使用exec表单并直接执行shell时,如 对于shell表单的情况,它是执行环境的shell 变量扩展,而不是码头。