我正在关注tutorial关于Docker。我在Windows上运行,因此我已经安装了Docker for Windows并注册了Hub。
当前,我正在Docker上创建我的第一个Apache实例。
在学习完本教程之后,我创建了一个debian
派生类的第一个Dockerfile并运行了该容器。我的输出与教程一致(>
表示Windows提示符)
> docker run -it --name mydebian_container mydebian
root@ef9eb174874a:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 02:43 pts/0 00:00:00 bash
root 9 1 0 02:43 pts/0 00:00:00 ps -ef
然后,我遵循了从容器运行Apache的教程
Dockerfile
FROM debian
RUN apt-get update &&\
apt-get -y install procps libapache2-mod-php
CMD service apache2 start
很酷,是吗?但是当我运行容器时,什么也没有发生,并且容器本身成功退出了
D:\IdeaDevOps\dockers\apache2>docker run -it --name apache2 -v d:\IdeaDevOps\dockers\apache2:/var/www/html debian_apache2
[....] Starting Apache httpd web server: apache2AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
. ok
>docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09d5b4b3fa49 debian_apache2 "/bin/sh -c 'service…" 24 seconds ago Exited (0) 22 seconds ago apache2
8d1c4522aa30 mydebian "bash" 2 hours ago Exited (0) 2 hours ago elated_wing
ae769d388b36 ubuntu "bash" 2 hours ago Exited (0) 2 hours ago kind_murdock
5596841696f6 mydebian "bash" 2 hours ago Exited (0) 2 hours ago festive_booth
我真的不知道为什么它无法保持运行中的Apache服务器。 AH00558
是警告,它从不会阻止Apache启动。
我的笔记本电脑上有一个正在运行的Apache 2.4实例,监听80,所以我停止了与之相关的Windows服务。
我还试图更改Docker中的端口绑定,或者不将任何端口绑定(-p
)传递给Docker,以查看会发生什么情况。
如您所见,我没有故意运行容器-d
(不同于链接的教程)来查看其输出。
是什么导致基于Apache的容器无法启动?我对运行真正的Apache / php并不真正感兴趣,但是我只想了解Docker以及如何根据您的需求自定义映像。 TL; DR我正在学习,现在没有真正的业务需求。
我试图用雷神锤的方法。如果我坚持执行docker start apache2
,那么我只能使Apache服务器存活几秒钟,而这只是在浏览器上浏览根目录的时间。服务器最终结束
D:\IdeaDevOps\dockers\apache2>docker start apache2
apache2
D:\IdeaDevOps\dockers\apache2>docker start apache2
apache2
D:\IdeaDevOps\dockers\apache2>docker start apache2
apache2
D:\IdeaDevOps\dockers\apache2>docker start apache2
apache2
D:\IdeaDevOps\dockers\apache2>docker start apache2
apache2
D:\IdeaDevOps\dockers\apache2>docker start apache2
apache2
D:\IdeaDevOps\dockers\apache2>docker exec apache2 bash
D:\IdeaDevOps\dockers\apache2>docker exec apache2 bash
D:\IdeaDevOps\dockers\apache2>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c669aacbed7a debian_apache2 "/bin/sh -c 'service…" 20 minutes ago Up 17 seconds 0.0.0.0:80->80/tcp apache2
D:\IdeaDevOps\dockers\apache2>docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c669aacbed7a debian_apache2 "/bin/sh -c 'service…" 20 minutes ago Exited (1) 1 second ago apache2
8d1c4522aa30 mydebian "bash" 2 hours ago Exited (0) 2 hours ago elated_wing
ae769d388b36 ubuntu "bash" 2 hours ago Exited (0) 2 hours ago kind_murdock
5596841696f6 mydebian "bash" 2 hours ago Exited (0) 2 hours ago festive_booth
D:\IdeaDevOps\dockers\apache2>docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c669aacbed7a debian_apache2 "/bin/sh -c 'service…" 21 minutes ago Exited (1) 23 seconds ago apache2
8d1c4522aa30 mydebian "bash" 2 hours ago Exited (0) 2 hours ago elated_wing
ae769d388b36 ubuntu "bash" 2 hours ago Exited (0) 2 hours ago kind_murdock
5596841696f6 mydebian "bash" 2 hours ago Exited (0) 2 hours ago festive_booth
答案 0 :(得分:1)
泊坞窗容器需要暂停进程以保持运行状态。
当您运行“ service apache2 start”时,该服务即已启动,容器即已停止。
因此,您应该使用不断运行的命令,例如:apachectl -D FOREGROUND