我正在尝试更新.htaccess
Docker 容器上的文件。更新文件后,我需要重新启动 Apache。每当我尝试使用命令重新启动 Apache 时service apache2 restart
,都会收到以下错误:
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs Action 'start' failed. The Apache error log may have more information. ...fail!
当我进入错误日志时,没有新的错误。这是我的 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"]
答案1
TLDR;你的情况重新启动 apache 的命令是kill -USR1 1
这里有几点需要澄清:
- 您的 docker 镜像正在使用 CMD 直接运行 apache。
- 这意味着 apache 主进程将始终具有 PID=1,并且您没有使用 init 系统。
- 您正在尝试使用
service
依赖于 init 系统的命令重新启动 apache。哎呀 - 另一种正常重启 Apache 的方法是向主进程发送信号。更多信息请阅读:https://httpd.apache.org/docs/current/stopping.html
答案2
根据您的 Dockerfile,您在创建 docker 镜像时包含 HTML 文件:
ADD src /var/www
那么你能解释一下为什么在运行镜像后需要编辑 .htaccess 文件吗?如果你需要在不同的主机上使用不同的 .htaccess 文件,“docker” 方法是使用数据量运行容器时:
docker run -v /path/to/host.htaccess:/var/www/.htaccess user/image