可以在运行docker run命令时使用--entrypoint修改镜像的入口点。我想在启动时使用一些参数在镜像中启动脚本。我可以让docker在启动时以如下方式运行脚本
docker run -it --rm --entrypoint /my/script/path.sh my-docker-image
如何将参数传递给脚本?
请注意,我无法修改用于创建该镜像的原始dockerfile。我也不想以该镜像为基础创建另一个docker镜像。
最佳答案
当您的Docker镜像具有ENTRYPOINT
时(通过Dockerfile或在命令行中提供--entrypoint
提供),镜像名称之后的docker run
命令行上的所有参数都将传递到入口点脚本。
因此,例如,如果我在myscript.sh
中有这样的脚本:
#!/bin/sh
echo "Here are my arguments: $@"
我运行这样的图像:
$ chmod 755 myscript.sh
$ docker run -it --rm -v $PWD/myscript.sh:/myscript.sh \
--entrypoint /myscript.sh alpine one two three
我将看到输出:
Here are my arguments: one two three
...然后容器将退出,因为入口点脚本未安排执行其他任何操作。您可以将此处的
alpine
(这是一个最小的docker镜像)替换为具有/bin/sh
的任何其他Docker镜像(因此,大多数镜像)。例如:$ docker run -it --rm -v $PWD/myscript.sh:/myscript.sh \
--entrypoint /myscript.sh centos one two three
Here are my arguments: one two three
请注意,在本示例中,我使用
-v
参数将主机上的脚本安装到容器中,因为在本示例中,我不想创建新镜像。您显然可以将类似的脚本烘烤到图像中。有关详细信息,请阅读ENTRYPOINT文档。
关于docker - 覆盖的docker入口点的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41864754/