Контейнер Docker закрывается после запуска Apache - PullRequest
0 голосов
/ 20 мая 2018

ОК, поэтому я настроил свой док-контейнер так, как мне нужно.

Это мой текущий 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), контейнер, кажется,start, выводит сообщение Apache, а затем останавливается, без терминала, ничего.(и при этом он не работает в фоновом режиме).

Что происходит?Я просто хочу иметь возможность автоматически запускать Apache и поддерживать работоспособность терминала, чтобы я тоже мог там что-то делать.

1 Ответ

0 голосов
/ 20 мая 2018

Контейнеры - это инструмент для изоляции работающего приложения, и они работают до тех пор, пока не будет запущено запущенное приложение.Если это приложение представляет собой оболочку или команду, которая запускает демон в фоновом режиме, как вы это делали, при возврате оболочки или команды контейнер немедленно завершится.

Решение состоит в том, чтобы запустить ваше приложение на переднем плане.,Шаги, чтобы сделать это с Apache, уже были сделаны с официальными изображениями, которые я бы рекомендовал использовать вместо создания своих собственных.Вы можете увидеть их Dockerfile здесь .И вы можете использовать их изображение в Dockerfile .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...