【发布时间】:2019-11-26 06:40:06
【问题描述】:
我正在关注关于 Docker 的 tutorial。我在 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
【问题讨论】:
-
是说教程坏了吗?
-
本教程将指导您使用
service start,但这是在虚拟机中使用的东西。容器不是虚拟机。更多信息:systemd and systemctl within Ubuntu Docker images。查看BMitch提供的答案 -
@usr-local-ΕΨΗΕΛΩΝ 可能是的。
标签: docker