【发布时间】: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