使用docker创建php容器并配合nginx容器运行php文件
安装php容器,我选择的版本是:php:7.4-fpm。为了方便修改文件,我进行了2个目录挂载:
a、将容器中的目录“/usr/local/etc”挂载到宿主主机“/docker/php”;
b、将容器中的目录“/var/www/html”挂载到宿主主机“/docker/web”;
拉取镜像并运行容器:
docker pull php:7.4-fpm
docker run \
--name php \
-v /docker/php:/usr/local/etc \
-v /docker/web:/var/www/html \
-p 9000:9000 \
-d php:7.4-fpm
安装完成之后,要配合nginx使用进行网站访问,还需要修改以下几个地方:
1、修改文件/usr/local/etc/php-fpm.d/www.conf(这个文件已挂载到宿主主机“/docker/php/php-fpm.d/www.conf”,可以直接在宿主主机中修改):
找到:
listen = 127.0.0.1:9000
修改为:
listen = 0.0.0.0:9000
2、修改nginx网站配置文件/etc/nginx/conf.d/default.conf(nginx容器的安装及注意事项参考:使用docker创建nginx容器):
location ~ [^/]\.php(/|$) {
#php容器中网站目录
root /var/www/html;
#php容器的IP,也可以是容器名,9000是php容器中的php运行端口
fastcgi_pass 172.17.0.4:9000;
fastcgi_index index.php;
#/var/www/html为php容器中网站目录
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
注:查看名为“php”的容器的内网ip地址:
docker inspect php | grep "IPAddress"
注:nginx和php挂载到宿主主机的目录要一致(便于管理),容器内的目录可不一致。
重启php和nginx服务,就应该能正常访问并解析php文件了。
如果还是不能访问php文件,查看nginx日志报错:
connect() failed (113: No route to host) while connecting to upstream
原因:Centos7中默认将原来的防火墙iptables升级为了firewalld,请尝试关闭firewall并禁止firewall开机启动:
systemctl stop firewalld.service
systemctl disable firewalld.service
或者不关闭防火墙,打开对应的端口也可以:
firewall-cmd --zone=public --add-port=9000/tcp --permanent
docker安装的php没有mysqli扩展,需要我们自己手动安装,详情参考《在php容器中安装php扩展》。