运行 docker 镜像时如何覆盖 CMD?

运行 docker 镜像时如何覆盖 CMD?

我想要检查其他人创建的、指定了入口点和 cmd 的 docker 镜像,例如:

ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]

我目前正在做:

docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login

有没有办法将 CMD 覆盖为空(这样我就不必使用“--login”)?

答案1

您可以直接输入docker run -it --entrypoint=/bin/bash $IMAGE -i(您将从图像启动一个新容器并以交互模式获取 bash shell),然后在该容器中运行 entrypoint 命令。

然后,您可以检查正在运行的容器是否处于应运行的状态。

编辑:从 Docker 1.3 开始,您可以使用exec它在正在运行的容器中运行进程。像平常一样启动容器,然后通过发出以下命令进入容器:

docker exec -it $CONTAINER_ID /bin/bash

假设已安装 bash,您将获得对正在运行的容器的 shell 访问权限。

答案2

看:https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

相关部分:

CMD(默认命令或选项)回想一下 Docker 命令行中的可选命令:

$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

此命令是可选的,因为创建 IMAGE 的人可能已经使用 Dockerfile CMD 提供了默认命令。作为操作员(从映像运行容器的人),您只需指定新的命令即可覆盖该 CMD。

如果图像还指定了 ENTRYPOINT,则 CMD 或 COMMAND 将作为参数附加到 ENTRYPOINT。

所以为了做你想做的事你需要仅有的指定一个 cmd,并使用 覆盖/bin/bash。虽然不是完全“空”,但它完成了 99% 的工作。

答案3

对于任何来这里覆盖入口点和命令以传递其他命令的人,例如运行 bash 而不是入口点脚本,然后运行带有参数的其他命令(从其他答案中我不清楚):

 docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'

-c 'npm link ...'是参数,/bin/sh因此您可以在此处传递您想要在容器中运行的任何命令。/bin/sh用于高山图像,/bin/bash最有可能用于其他图像。

相关内容