Как перезапустить 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.