Как перезапустить apache2 без завершения док-контейнера?

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

php:5.6-apache

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

[email protected]:/var/www/html# service apache2 restart
Restarting web server: apache2Terminated
[email protected]:/var/www/html#
[email protected]:

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

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

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

Attaching to dltasklight_phlaconapp_1
phlaconapp_1 | AH00558: apache2: Could not reliably determine the server 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 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

Ответ 1

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

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

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

/etc/init.d/apache2 reload

Ответ 2

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

docker restart <container>

Ответ 3

sudo docker kill --signal="USR1" your_appache_container

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

Сигнал остановки сейчас: TERM

Изящный сигнал перезагрузки: USR1

Перезапустить сигнал теперь: HUP

Изящный стоп-сигнал: WINCH

От: этот веб-сайт

Ответ 4

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

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

Ответ 5

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

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

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