【问题标题】:How do have my docker image run apache as a service如何让我的 docker 映像将 apache 作为服务运行
【发布时间】:2016-10-13 16:50:40
【问题描述】:

我已经构建了一个 docker 镜像来运行 apache。我已经从 ubuntu 基础映像构建了它,这样我就可以设置我想要的 apache 和 php 版本。我在 docker 文件的末尾添加了一个 CMD 以在前台运行 apache。

FROM ubuntu:16.04

RUN apt-get update && \
    apt-get install -y --allow-unauthenticated software-properties-common && \
    add-apt-repository ppa:ondrej/apache2 && \
    apt-get update && \

    ....

WORKDIR /

CMD ["/usr/sbin/apachectl","-DFOREGROUND"]

我正在尝试使用 docker-compose(以及其他一些服务)运行容器。但是容器立即退出。如果使用docker 命令运行映像,也会发生同样的情况。

docker run my_image
docker ps

有趣的是,如果我使用docker run -it my_image 运行它,那么容器就会启动并且我会被带入一个 bash shell。 (我相信我使用的 ubuntu 基础映像上的默认 CMD 是 bash)。

我错过了什么吗?如何编写我的 Dockerfile 以便 apache 在映像上作为服务运行?

【问题讨论】:

  • docker logs <CONTAINER> 说什么?
  • “我正在尝试从 Dockerfile 运行容器(以及其他一些服务)” - 不确定这是否有意义?你是什​​么意思?
  • “有趣的是,如果我使用 docker run -it my_image 运行它” - 很奇怪,您能发布整个 Dockerfile 以及您尝试如何运行它(各种方式)吗?
  • @johnharris85 - 谢谢,我的错 - 我的意思是说我正在尝试使用 docker-compose 运行容器。我已经更新了我的问题。回到办公桌后,我可能会发布更多信息。

标签: apache docker docker-compose dockerfile


【解决方案1】:

如果您在运行映像时获得了 bash shell,听起来您的 CMD ["/usr/sbin/apachectl","-DFOREGROUND"] 没有生效。

仔细检查您的docker build 命令是否成功,并且您正在运行构建的映像而不是其他映像。

这是一个 Dockerfile 示例,相关的 docker build 输出(特别是 CMD 步骤),以及它运行的示例:

$ cat Dockerfile
FROM ubuntu:16.04
RUN apt-get -y update && apt-get -y install apache2 && rm -rf /var/lib/apt/lists/*

CMD apachectl -DFOREGROUND
$ docker build -t myapache .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:16.04
 ---> 2fa927b5cdd3
Step 2 : RUN apt-get -y update && apt-get -y install apache2 && rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> f766fd84056d
Step 3 : CMD apachectl -DFOREGROUND
 ---> Running in 2814d231e50e
 ---> 774b579e43ce
Removing intermediate container 2814d231e50e
Successfully built 774b579e43ce
$ r run -d --name myapache -p 80:80 myapache
4718994f1669306c64ac6846f4e0f87aa15a63a888ca7d5c8ba711f39379db57
$ http://localhost:80/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <!--
    Modified from the Debian original for Ubuntu
    Last updated: 2014-03-19
    See: https://launchpad.net/bugs/1288690
...

【讨论】:

  • 就是这样 - 我正在运行的容器不是来自我认为的 Dockerfile - 检查构建的输出是我需要识别的。谢谢@programmerq!
  • CMD apachectl -DFOREGROUND 是我的问题。现在可以了,谢谢:-)
猜你喜欢
  • 2013-09-01
  • 1970-01-01
  • 2018-10-23
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多