在Docker上重启apache

时间:2016-04-26 15:31:18

标签: php apache ubuntu docker dockerfile

我正在尝试更新Docker容器上的.htaccess文件。更新文件后,我需要重启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"]

2 个答案:

答案 0 :(得分:4)

这是因为当你docker run容器时,你(正确地)没有启动apache作为服务。这一行:

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

在前台启动apache。

我猜你正在使用docker exec在容器中执行shell来编辑文件并重新启动apache?如果是这样,这将解释为什么第二次启动apache时会抱怨现有的进程。

我认为如果你以这种方式使用容器,那么你真的错过了容器的好处,当你将它们视为不可变时,并将数据保存在容器外(在主机或卷上),以便你可以轻松更换容器。

在您的情况下,如果您需要修改.htaccess文件,我认为通过使用如下命令将该文件挂载到容器中更为正常:

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

然后,如果您必须更改文件并需要重新启动apache,则可以使用:

docker restart apache

虽然可能值得调查Charlotte Dunois的建议,你可能甚至不需要重启apache。

答案 1 :(得分:0)

实际上,您无需重新启动Apache即可应用.htaccess中定义的更改-这些更改是在运行时应用的。如果您要修改apache配置文件(例如虚拟主机定义或httpd.conf中的内容),则也可以重新加载配置,而无需使用

重新启动apache。
sudo /etc/init.d/apache2 reload