我们有一个php应用程序,使用它运行良好 Docker映像:
php:7.2-apache-stretch
我们现在必须利用下图获得更好的性能,并使应用程序像以前一样工作。
php:7.2.17-fpm-stretch
由于该图片中没有apache。我从安装apache2和基于各种论坛的相关软件包开始更新了Dockerfile。
还有许多其他步骤。我刚刚添加了在Dockerfile中更新的说明。
FROM php:7.2.17-fpm-stretch
RUN apt-get update && apt-get install -y apache2 wget
RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f
RUN a2enmod actions proxy_fcgi fastcgi
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY info.php /var/www/html/info.php
COPY run.sh /app/run.sh
# EXPOSE 9000
RUN chmod 755 /app/run.sh
CMD "/app/run.sh"
info.php包含<?php phpinfo( ); ?>
。在run.sh脚本中,我们如下所示启动php-fpm服务和apache2
php-fpm -D
/ usr / sbin / apachectl -D FOREGROUND
以前,我试图从映射到9000(fpm)的端口访问该应用程序。当我访问运行apache的正确端口时,我能够查看info.php。
vhost.conf文件中的内容。
<FilesMatch \.php$>
SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>
答案 0 :(得分:2)
我做了一些修改。
我使用了这个经过稍微修改的dockerfile:
FROM php:7.2.17-fpm-stretch
RUN apt-get update; apt-get install -y apache2 wget
RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f
RUN a2enmod actions proxy_fcgi fastcgi
COPY run.sh /app/run.sh
RUN chmod 755 /app/run.sh
CMD "/app/run.sh"
我还向/etc/apache2/sites-available/000-default.conf中添加了以下代码段(与您所做的修改相同):
<FilesMatch \.php$>
SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>
这是我得到的输出:
[09-Apr-2019 21:23:06] NOTICE: fpm is running, pid 9
[09-Apr-2019 21:23:06] NOTICE: ready to handle connections
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
还,您是否尝试在没有缓存的情况下构建dockerfile?有时,缓存可能会导致软件包安装出现问题(有关更多详细信息,请参见here)。要完整构建图像,只需使用:
docker build --no-cache
答案 1 :(得分:1)
我使用此dockerfile使新配置正常工作
FROM php:7.2.17-fpm-stretch
RUN apt-get update && apt-get install -y apache2 wget
RUN cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb && dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb;apt-get install -f
RUN a2enmod actions proxy_fcgi fastcgi
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY info.php /var/www/html/info.php
COPY run.sh /app/run.sh
RUN chmod 755 /app/run.sh
EXPOSE 80
CMD "/app/run.sh"
我运行的命令是:
docker run -P -d --rm <php-image>
暴露的端口是:
访问info.php0.0.0.0:32773-> 80 / tcp,0.0.0.0:32772-> 9000 / tcp
答案 2 :(得分:0)
我能够访问php页面。一切都很好。但是我的方向错误。当我运行容器时。
docker run -P -d --rm php:test-fpm
输出为
82071c9ff023 php:test-fpm "docker-php-entrypoi…" 2 seconds ago Up 1 second 0.0.0.0:32778->80/tcp, 0.0.0.0:32777->9000/tcp practical_mclean
我正在访问localhost:32777 / info.php。但是我应该访问暴露了Apache和本地主机的32778:32778 / info.php正常工作! 。
有没有一种方法可以避免9000的端口映射。?