docker - 覆盖的docker入口点的参数

标签 docker

可以在运行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/

相关文章:

python - 在 Docker 容器中运行 Windows Server Core

macos - Mac OSX 上的 Docker CE 在启动时挂起

docker - Docker-compose ps使用目录前缀而不是projectname-prefix显示Docker名称

postgresql - Spring Docker 容器无法访问 Postgres Docker 容器

ruby-on-rails - 将 rbenv 与 Docker 结合使用

docker - 如何让 docker 容器从/etc/motd 加载文本

node.js - 使用 docker-compose 在 dockerized node.js 应用程序中重新加载代码

php - 无法在Docker镜像中使用Composer安装依赖项

docker - docker-compose 中 ELASTICSEARCH_HOSTS 的语法是什么?

java - 如何在 buildspec.yml 中正确定义阶段和命令?