Tyl*_*ert 4 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"]
Run Code Online (Sandbox Code Playgroud)
Raf*_*ski 12
实际上,您无需重新启动 Apache 即可应用 .htaccess 中定义的更改 - 这些更改是在运行时应用的。如果您正在修改 apache 配置文件(如虚拟主机定义或 httpd.conf 中的内容),您还可以重新加载配置而无需使用重新启动 apache
sudo /etc/init.d/apache2 reload
Run Code Online (Sandbox Code Playgroud)
docker run
这是因为当您使用容器时,您没有(正确地)将 apache 作为服务启动。该行:
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
Run Code Online (Sandbox Code Playgroud)
在前台启动 apache。
我猜您正在使用docker exec
容器中的 shell 来编辑文件并重新启动 apache?如果是这样,这就解释了为什么你第二次启动 apache 时它会抱怨现有的进程。
我认为,如果您以这种方式使用容器,那么您真的错过了容器的好处,当您将它们视为不可变并将数据保留在容器外部(无论是在主机上还是在卷中)时,您就可以轻松地使用容器更换容器。
在您的情况下,如果您需要修改 .htaccess 文件,我认为使用以下命令将该文件安装到容器中会更正常:
docker run -d --name apache -v $(pwd)/.htaccess:/path/to/.htaccess -p 80:80 image:tag
Run Code Online (Sandbox Code Playgroud)
然后,如果您必须更改文件并需要重新启动 apache,您可以使用:
docker restart apache
Run Code Online (Sandbox Code Playgroud)
尽管可能值得研究 Charlotte Dunois 的建议,即您甚至可能不需要重新启动 apache。
归档时间: |
|
查看次数: |
36898 次 |
最近记录: |