Перезапустите Apache на Docker

Я пытаюсь обновить мой файл .htaccess в контейнере Docker. После обновления файла мне нужно перезапустить Apache. Всякий раз, когда я пытаюсь перезапустить Apache: с помощью команды service apache2 restart Я получаю следующую ошибку:

(98) Адрес уже используется: make_sock: невозможно привязать к адресу 0.0.0.0:80
нет доступных гнезд для прослушивания, отключение
Невозможно открыть логи
Действие «старт» не выполнено.
Журнал ошибок Apache может содержать больше информации.
…потерпеть поражение!

Когда я попал в журнал ошибок, там нет новых ошибок.
Вот как выглядит мой Dockerfile:

    FROM ubuntu:12.04

# Install dependencies
RUN apt-get update -y
RUN apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql php5-curl vim

# Install app
RUN rm -rf /var/www/ *
ADD src /var/www

# Configure apache
RUN a2enmod rewrite
RUN chown -R www-data:www-data /var/www
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD ["/usr/sbin/apache2", "-D",  "FOREGROUND"]

3

Решение

Это потому, что вы (правильно) не запускаете Apache как сервис, когда вы docker run контейнер. Линия:

CMD ["/usr/sbin/apache2", "-D",  "FOREGROUND"]

Запускает Apache на переднем плане.

Я предполагаю, что вы тогда используете docker exec выполнить оболочку в контейнере, отредактировать файл и перезапустить apache? Если это так, это объясняет, почему при втором запуске apache он жалуется на существующий процесс.

Я думаю, что если вы используете контейнеры таким образом, то вы действительно упускаете преимущество контейнеров, которое возникает, когда вы рассматриваете их как неизменяемые и сохраняете данные вне контейнера (на хосте или в томах), чтобы вы могли легко заменить контейнер.

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

docker run -d --name apache -v $(pwd)/.htaccess:/path/to/.htaccess -p 80:80 image:tag

Затем, если вам нужно изменить файл и перезапустить apache, вы можете использовать:

docker restart apache

Хотя, возможно, стоит рассмотреть предложение Шарлотты Дюнуа о том, что вам может даже не понадобиться перезапускать Apache.

3

Другие решения

На самом деле вам не нужно перезапускать Apache, чтобы применить изменения, определенные в .htaccess — они применяются во время выполнения. Если вы изменяете конфигурационный файл apache (например, определение виртуального хоста или что-то в httpd.conf), вы также можете перезагрузить конфигурацию без перезапуска apache, используя

sudo /etc/init.d/apache2 reload
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector