在 Docker 上重新启动 apache

在 Docker 上重新启动 apache

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

这里有几点需要澄清:

  1. 您的 docker 镜像正在使用 CMD 直接运行 apache。
  2. 这意味着 apache 主进程将始终具有 PID=1,并且您没有使用 init 系统。
  3. 您正在尝试使用service依赖于 init 系统的命令重新启动 apache。哎呀
  4. 另一种正常重启 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

相关内容