Как перезапустить apache2 без сбоя контейнера docker?

Я использую в качестве базы PHP docker container С помощью тега:

php:5.6-apache

когда я пытаюсь перезапустить apache2 внутри контейнера, контейнер останавливается:

root@phalconapp:/var/www/html# service apache2 restart
Restarting web server: apache2Terminated
root@phaclonapp:/var/www/html#
me@myLocalComputer:

как перезапустить apache2 без остановки контейнера?

Я хочу поиграть с контейнером и настроить его, прежде чем я помещу свои изменения в dockerfile. Я хочу установить некоторое расширение, и для их работы мне нужно перезапустить apache для внесения изменений эффект.

Это файл журнала через:

Attaching to dltasklight_phlaconapp_1
phlaconapp_1 | AH00558: 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
phlaconapp_1 | AH00558: 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
phlaconapp_1 | [Mon May 30 10:19:24.556154 2016] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/5.6.22 configured -- resuming normal operations
phlaconapp_1 | [Mon May 30 10:19:24.556181 2016] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
phlaconapp_1 | [Mon May 30 10:21:11.754993 2016] [mpm_prefork:notice] [pid 1] AH00169: caught SIGTERM, shutting down
dltasklight_phlaconapp_1 exited with code 0

5 ответов


Если вы используете apache в качестве основной службы для сохранения запущенного контейнера, вы не можете перезагрузить его. Просто потому, что вы создали образ и установили CMD с ним.

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

попробуйте перезагрузить без перезапуска службы:

/etc/init.d/apache2 reload

моим решением было выйти из моей оболочки bash в контейнер и просто перезапустить контейнер вне Docker. Поскольку Apache установлен в качестве основной службы, это также перезапускает Apache и не приводит к сбою контейнера.

docker restart <container>

но перед тем, как идти, ваш apache терпит неудачу при перезапуске? Вот как он выходит? В этом случае, пожалуйста, сделайте это, установив правильные конфигурации и взглянув на эти журналы.

один из методов, который вы можете попробовать, - это войти в контейнер (bash), и у вас всегда может быть настройки совершение в точке, где она работает. Затем вы можете изменить изображение базового контейнера на это.

У меня были обходные пути для подобных ситуаций, создавая новые изображения из эти совершено те, которые используют разные ENTRYPOINT's в моей Dockefile.


Я хочу настроить контейнер, мне нужно установить некоторое расширение и для их работы мне нужно перезапустить apache для внесения изменений эффект.

Это противоречит неизменяемому принципу инфраструктуры Докера. IMHO, вы используете контейнер docker, похожий на полномасштабную виртуальную машину. Вместо этого я бы предложил вам рассматривать изображение docker как окончательный артефакт и его версию. Примечание: это только мое скромное мнение, вы можете иметь действительное используйте то, о чем я не знаю, что мне любопытно узнать.


sudo docker kill --signal="USR1" your_appache_container

другие сигналы, которые можно использовать для достижения следующих целей :

Стоп-Сигнала: термин

Перезапуска Сигнала: USR1

Перезапустить Сейчас Сигнал:АП

Изящный Стоп-Сигнал:лебедка

от: этот сайт