【问题标题】:Restart apache on Docker在 Docker 上重新启动 apache
【发布时间】:2023-03-15 02:54:01
【问题描述】:

我正在尝试在 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"]

【问题讨论】:

  • 如果更改.htaccess,则无需重新启动apache...也许您应该查看是否有其他程序正在侦听端口80。此外,此问题对于Stack Overflow 来说也是题外话因为这与编程无关。 Super User 是正确的平台(请勿交叉发布)。

标签: php apache ubuntu docker dockerfile


【解决方案1】:

这是因为当您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。

【讨论】:

    【解决方案2】:

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

    sudo /etc/init.d/apache2 reload
    

    【讨论】:

    • 这适用于 Alpine 吗?我不相信 apache2 或 httpd 位于 alpine 的那条路径中。
    猜你喜欢
    • 2010-11-09
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 2015-05-24
    • 2011-08-04
    • 2019-03-19
    相关资源
    最近更新 更多