【问题标题】:Docker container closes after starting Apache启动 Apache 后 Docker 容器关闭
【发布时间】:2018-10-30 05:40:27
【问题描述】:

好的,所以我已经根据需要设置了我的 docker 容器。

这是我当前的Dockerfile

FROM ubuntu:16.04

RUN apt-get update
RUN apt-get upgrade -y

RUN apt-get install -y \
    build-essential sudo software-properties-common \
    libboost-dev libboost-filesystem-dev libboost-program-options-dev \
    libboost-regex-dev libboost-system-dev libboost-thread-dev \
    libicu-dev libtiff5-dev libfreetype6-dev libpng12-dev \
    libxml2-dev libproj-dev libsqlite3-dev libgdal-dev \
    libcairo-dev libharfbuzz-dev

RUN apt-get install -y postgresql postgresql-contrib

RUN apt-get install -y nodejs 

RUN apt-get install -y python3-dev python-dev git python-pip \
    python-setuptools python-wheel python3-setuptools \
    python3-pip python3-wheel python-cairo-dev libboost-python-dev

RUN apt-get install -y ruby ruby-dev

RUN apt-get install -y wget curl 

RUN pip install --upgrade pip
RUN pip install mapnik

RUN sudo gem install awesome_print colorize twitter_cldr \
    nokogiri unidecoder

RUN apt-get -y install apache2 php-pear lynx-cur

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid

EXPOSE 80

ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf

如果我构建它并使用docker run -p 80:80 -it mycontainer 运行它,它运行良好。我可以通过终端,执行/usr/bin/apache2ctl start,服务器照常启动,我可以通过主机浏览器的 localhost 访问它。太好了!

现在,我们的想法是简单地将 /usr/bin/apache2ctl start 命令放在我的 Dockerfile 中,这样我就不必每次容器启动时都编写它。

但是:如果我将 CMD ["/usr/sbin/apache2ctl", "start"] 放在 Dockerfile 的最后,构建并运行它(使用 docker run -p 80:80 -it mycontainer),容器似乎已启动,输出一条 Apache 消息,然后它停止,没有终端,什么都没有。 (也不在后台运行)。

发生了什么?我只是希望能够自动启动 Apache 并保持终端运行,这样我也可以在那里做事。

【问题讨论】:

    标签: apache ubuntu docker dockerfile


    【解决方案1】:

    容器是隔离正在运行的应用程序的工具,它们一直运行到启动的应用程序退出。如果这个应用程序是一个 shell 或命令,它像你所做的那样在后台启动一个守护进程,当 shell 或命令返回时,容器将立即退出。

    解决方案是在前台运行您的应用程序。使用 Apache 执行此操作的步骤已经使用官方图像完成,我建议您使用这些图像来构建您自己的图像。你可以see their Dockerfile here。你也可以use their image on Dockerfile

    【讨论】:

    • 这完全正确。您正在寻找apachectl -D FOREGROUND
    • @QkiZ 我从这里看不到你的屏幕。您应该发布一个包含足够详细信息的问题来重现您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    相关资源
    最近更新 更多