记录一些常用的函数和瞎折腾的过程……

使用docker创建php容器并配合nginx容器运行php文件

提醒:本文最后更新于 1206 天前,文中所描述的信息可能已发生改变,请谨慎使用。

安装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扩展》。