我正在尝试更新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"]
答案 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