docker部署nginx+php最近在学习docker,准备搭建nginx+php开发环境,记录搭建过程,先给一份docker-compose.yml部署配置版本:'3'services:nginx:container_name:mynginximage:nginxports:-'80:80'volumes:-'/etc/nginx/:/etc/nginx'#Configuration-'/var/log/nginx/:/var/log/nginx/'#log-'/data/php/yxyy/html:/data/php/yxyy/html'#项目路径php:container_name:myphpimage:php:7.2-fpmvolumes:-'/data/php/yxyy/html/:/data/php/yxyy/html/'-'/usr/local/php7.2/:/usr/local/etc/'以下是我整个搭建和学习的过程,docker的安装就不记录了,下面记录下nginx+php的搭建过程(前面有问题,不要照搬)nginx先安装一个临时的nginx容器dockerrun--nametmpnginx-d-p80:80nginx进入127.0.0.1在浏览器上出现熟悉的界面,开心点,输入tmppnginxcontainerdockerexec-ittmpnginx/bin/bash寻找配置文件位置find/-namenginx.conf#找到配置文件,将/ect/nginx中的一个容器nginx配置复制到主机/ect/nginxdockercptmpnginx:/ect/nginx/ect/nginx修改nginx的配置,比如站点根目录/etc/nginx/conf.d/default.conf等信息,我的项目删除了/data/php/下的tmpnginx容器yxyy/html并启动一个装载自定义配置文件的容器dockerrun--namemynginx-d-p80:80\-v/ect/nginx:/ect/nginx\-v/var/log/nginx/:/var/log/nginx/\-v/data/php/yxyy/html/:/data/php/yxyy/html/nginx配置文件说明/ect/nginx:nginx配置目录/var/log/nginx:nginx日志/data/php/yxyy/html:项目目录在浏览器输入127.0.0.1验证普通PHPphp的安装过程也和nginx类似。我使用的图像是php:7.2-fpm。以下是我的安装过程:dockerrun--nametmpphp-d-p80:80php:7.2-fpm#安装一个临时的php:7.2-fpm容器dockerexec-ittmpphp/bin/bash#进入容器find/-namephp-fpm.conf#在/usr/local/etc/中找到配置文件dockercptmpnginx:/usr/local/etc//usr/local/php7.2/#复制一个容器配置dockerrun--namemynginx-d-p9000:9000\-v/usr/local/php7.2/:/usr/local/etc/\-v/data/php/yxyy/html/:/data/php/yxyy/html/php:7.2-fpm此时,我以为可以了,用浏览器访问,结果显示502502,查看nginx日志如下:*19connect()failed(111:Connectionrefused)whileconnecting到上游,客户端:172.17.0.1,服务器:localhost,请求:“GET/index.phpHTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“localhost”连接问题,查看php容器是否up:dockerps#结果显示php容器up查看php容器的日志:dockerlogsmyphp#没有报错查看宿主进程:ps-ef|grepphp#php主进程和工作进程还有,作弊。既然进程都在,那只能是他们的通信出了问题。在主机host上telnet:telnet127.0.0.19000#可以正常连接。容器确实无法通信。但是我要验证一下:#输入mynginxcontainertelnet127.0.0.19000,notelnet....#Okaytheninstall,安装后telnet127.0.0.19000refuses,这里确认不能直接通信,运行nginx再次容器,加上--linkmyphpdockerrun--namemynginx-d-p80:80--linkmyphp\-v/ect/nginx:/ect/nginx\-v/var/log/nginx/:/var/log/nginx/\-v/data/php/yxyy/html/:/data/php/yxyy/html/nginx的理想是美好的,现实是残酷的,依然无法沟通。根据资料,--link是要废弃的,我安装的docker比较新。猜测可能是这个原因。使用另一种方法启动docker-compose集群管理方法。以下是docker-compose.yml配置:docker-composeup-dversion:'3'services:nginx:container_name:mynginximage:nginxports:-'80:80'volumes:-'/etc/nginx/:/etc/nginx'#configuration-'/var/log/nginx/:/var/log/nginx/'#log-'/data/php/yxyy/html:/data/php/yxyy/html'#项目路径php:容器_na我:myphp图片:php:7.2-fpm卷:-'/data/php/yxyy/html/:/data/php/yxyy/html/'-'/usr/local/php7.2/:/usr/local/etc/'猛烈运行,结果是250,还是不行。这时候想砸电脑进入容器:telnet127.0.0.19000#还是连接不上,心血来潮改成127.0.0.1容器的名字呢?telnetmyphp9000#没问题。这时,一种幸福感油然而生,这种幸福来得太突然了。修改nginx配置,将127.0.0.1改为myphp(容器名),重启。高光时刻来了,其实我想多了,502解决了,404碰巧碰到404Filenotfound,看到404,第一反应是路径不对。经过反复确认,路径没有问题。我认为这只能是权限问题。查看nginx日志:*32FastCGIsentinstderr:"Primaryscriptunknown"whilereadingresponseheaderls-l检查确实是未授权,看到没有权限会心一笑。给777权限看。不幸的是,它仍然不起作用。既然不行,那就让root用户全部执行吧。修改nginx.conf的配置,user=root,php-fmt的www.conf配置,user=rootgroup=root,重启容器看看是否还是不行。查看容器日志dockerlogsphpxxxshowsERROR:[poolwww]pleasespecifieduserandgroupotherthanrootPHPcannotexecutedwithroot,然后全部改成nginx,结果还是不行,cat/etc/passwd查看有没有这个用户,只有www的php-data用户,修改nginx和php配置,改成www-data用户,重启。最后
