为什么Docker中httpd容器会立即退出而没有任何错误

Sho*_*eki 5 docker dockerfile docker-compose

我是 Docker 新手。我的 Dockerfile(从教程中获得)是:

\n\n
FROM ubuntu\n\nENV DEBIAN_FRONTEND noninteractive\n\nRUN apt-get update \\\n&& apt-get install -y --no-install-recommends apache2 \\\n                        libapache2-mod-jk\nVOLUME ["/var/log/apache2"]\nRUN echo \'ServerName localhost\' >> /etc/apache2/apache2.conf\nEXPOSE 80 443\n\nENTRYPOINT ["apache2ctl", "-D", "FOREGROUND"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我给了docker build -t mg:httpd apache\\。没有错误。

\n\n
\xce\xbb docker images\nREPOSITORY          TAG                 IMAGE ID            CREATED                SIZE\nmg                  httpd               262d7a4f85fc        About an hour ago      248MB\n
Run Code Online (Sandbox Code Playgroud)\n\n

docker run -it mg:httpd

\n\n

没有错误,但光标立即返回到命令提示符。继续Unable to connect服用http://localhost/浏览器。

\n\n
\xce\xbb docker ps -a\nCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS                \n600231bbd461        mg:httpd            "apache2ctl -D FOR..."   2 minutes ago       Exited (0) 2 minutes ago             \n
Run Code Online (Sandbox Code Playgroud)\n\n

docker 日志为空

\n\n
\xce\xbb docker events\n2017-09-08T15:26:10.726720800+05:30 container create 5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157 (image=mg:httpd, name=zealous_ritchie)\n2017-09-08T15:26:10.740310700+05:30 container attach 5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157 (image=mg:httpd, name=zealous_ritchie)\n2017-09-08T15:26:11.035777100+05:30 network connect 2b8829b336575a2aa2210f55105d793e8f1b196d51845d38d3dc8ff322af6143 (container=5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157, name=bridge, type=bridge)\n2017-09-08T15:26:11.090873500+05:30 volume mount e8421cbd867fca04f0dd3ee6da815c59cad5fc32c5a427710d144213b43caa26 (container=5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157, destination=/var/log/apache2, driver=local, propagation=, read/write=true)\n2017-09-08T15:26:11.548736900+05:30 container start 5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157 (image=mg:httpd, name=zealous_ritchie)\n2017-09-08T15:26:11.573272300+05:30 container resize 5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157 (height=41, image=mg:httpd, name=zealous_ritchie, width=168)\n2017-09-08T15:26:12.733164900+05:30 container die 5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157 (exitCode=0, image=mg:httpd, name=zealous_ritchie)\n2017-09-08T15:26:13.227455500+05:30 network disconnect 2b8829b336575a2aa2210f55105d793e8f1b196d51845d38d3dc8ff322af6143 (container=5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157, name=bridge, type=bridge)\n2017-09-08T15:26:13.306885700+05:30 volume unmount e8421cbd867fca04f0dd3ee6da815c59cad5fc32c5a427710d144213b43caa26 (container=5325b79abe1988312952629165551c169a8bdc3fbe6e473cf0177859db7c0157, driver=local)\n
Run Code Online (Sandbox Code Playgroud)\n\n

可能是什么原因?容器未启动时如何查看apache log\\conf文件?

\n

phi*_*ipp 3

所以你的Web服务器没有作为前台进程启动,这就是容器立即停止的原因。

我认为你应该改变

ENTRYPOINT ["apache2ctl", "-D", "FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)

CMD ["apache2ctl", "-D", "FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)

因为您希望在安装容器时运行该命令。

ENTRYPOINT指令声明了用于执行CMD.

ENTRYPOINT ["apache2ctl", "-D", "FOREGROUND"]
results in:
$  apache2ctl -D FOREGROUND <command either from the run command line or the CMD directive>
Run Code Online (Sandbox Code Playgroud)

我能找到的 Ubuntu 映像的默认命令/bin/bash. 因此,当您使用以下命令运行容器时:

docker run -it mg:httpd
Run Code Online (Sandbox Code Playgroud)

执行的结果命令将是:

$  apache2ctl -D FOREGROUND /bin/bash
Run Code Online (Sandbox Code Playgroud)

这显然没有多大意义。我建议仔细阅读那篇文章,它很好地解释了细节。

经过上述更改后,它将如下所示:

(default) ENTRYPOINT ["/bin/sh", "-c"]
CMD ["apache2ctl", "-D", "FOREGROUND"]
what results in:
$  /bin/sh -c "apache2ctl -D FOREGROUND"
Run Code Online (Sandbox Code Playgroud)