在Dockerfiles中有两个看起来与我类似的命令:CMD和ENTRYPOINT.但是我猜它们之间存在着一种(微妙的?)差异 - 否则对于同样的事情来说两个命令就没有任何意义.
文档说明了 CMD
CMD的主要目的是为执行容器提供默认值.
并为ENTRYPOINT:
ENTRYPOINT可帮助您配置可作为可执行文件运行的容器.
那么,这两个命令之间的区别是什么?
考虑以下 Dockerfile:
FROM ubuntu:16.04
RUN apt-get update && \
apt-get install -y apache2 && \
apt-get clean
ENTRYPOINT ["apache2ctl", "-D", "FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)
当使用命令运行容器时,容器将启动并保持运行状态,从而允许按预期从主机docker run -p 8080:80 <image-id>访问默认的 Apache 网页。https://localhost:8080但是,使用此运行命令,我无法使用 退出容器Ctrl+C,也如预期的那样,因为容器不是使用该-it选项启动的。现在,如果-it将选项添加到运行命令中,则容器在启动后立即退出。这是为什么?有没有一种优雅的方法可以让 apache 在退出时在前台运行Ctrl+C?