乐趣区

关于docker:docker-部署nginxphp

docker 部署 nginx+php

最近在学习 docker,筹备搭建 nginx + php开发环境,记录一下搭建过程,先给一份的 docker-compose.yml 部署配置

version: '3'
services:
  nginx:
    container_name: mynginx
    image: nginx
    ports:
      - '80:80'
    volumes:
      - '/etc/nginx/:/etc/nginx' #配置
      - '/var/log/nginx/:/var/log/nginx/' #日志
      - '/data/php/yxyy/html:/data/php/yxyy/html' #我的项目门路
  php:
    container_name: myphp
    image: php:7.2-fpm
    volumes:
      - '/data/php/yxyy/html/:/data/php/yxyy/html/'
      - '/usr/local/php7.2/:/usr/local/etc/'

上面是我整个搭建学习过程,dockers 的装置就不记录了,上面记录 nginx+php 搭建过程(后面是有问题的,别照抄哦)

nginx

先装置一个长期 nginx 容器

docker run --name tmpnginx -d -p 80:80  nginx

在浏览器上输出 127.0.0.1 呈现相熟的界面,美滋滋,进入 tmpnginx 容器

docker exec -it tmpnginx /bin/bash

搜寻配置文件地位

find / -name nginx.conf  #找到配置文件在 /ect/nginx 里

拷贝一份容器 nginx 配置到宿主 /ect/nginx

docker cp tmpnginx:/ect/nginx /ect/nginx

批改 nginx 配置,如/etc/nginx/conf.d/default.conf 的站点根目录等信息, 我的我的项目在/data/php/yxyy/html

删掉 tmpnginx 容器并启动一个挂载自定义配置文件的容器

docker run --name mynginx -d -p 80:80 \
           -v /ect/nginx:/ect/nginx \ 
           -v /var/log/nginx/:/var/log/nginx/ \
           -v /data/php/yxyy/html/:/data/php/yxyy/html/   nginx

配置文件阐明

  1. /ect/nginx:nginx 配置目录
  2. /var/log/nginx:nginx 日志
  3. /data/php/yxyy/html: 我的项目目录

在浏览器上 输出127.0.0.1 验证失常

PHP

php 的装置过程也和 nginx 相似,我用的镜像是php:7.2-fpm,上面是我的装置过程:

docker run --name tmpphp -d -p 80:80  php:7.2-fpm  #装置一个长期 php:7.2-fpm 容器
docker exec -it tmpphp /bin/bash #进入容器
find / -name php-fpm.conf  #找到配置文件在 /usr/local/etc/ 里
docker cp tmpnginx:/usr/local/etc/ /usr/local/php7.2/  #拷贝一份容器配置
docker run --name mynginx -d -p 9000:9000 \
           -v /usr/local/php7.2/:/usr/local/etc/ \ 
           -v /data/php/yxyy/html/:/data/php/yxyy/html/   php:7.2-fpm 

到了此时我认为好了,浏览器拜访一下,结果显示 502

502

查看 nginx 日志显示如下:

 *19 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"

连贯有问题,查看拍 PHP 容器是否起来了:

docker ps  #失去的结果显示 php 容器起来了

查看 php 容器的日志:

docker logs myphp #也没谬误

查看宿主主机过程:

ps -ef | grep php  #php master 和 worker 过程也有了,坑爹啊

既然过程都有了,那只能是他们通信出了问题, 在宿主主机上 telnet:

telnet 127.0.0.1 9000  #能够失常连贯

莫非容器之间不能通信, 找一下材料看还真是,但想验证一下:

# 进入 mynginx 容器 telnet 127.0.0.1 9000,没 telnet ....

#好吧那就装置,装置好后 telnet 127.0.0.1 9000 回绝, 到这里确认是不能间接通信了

从新运行 nginx 容器,加上--link myphp

docker run --name mynginx -d -p 80:80 --link myphp \
           -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-compose up -d
version: '3'
services:
  nginx:
    container_name: mynginx
    image: nginx
    ports:
      - '80:80'
    volumes:
      - '/etc/nginx/:/etc/nginx' #配置
      - '/var/log/nginx/:/var/log/nginx/' #日志
      - '/data/php/yxyy/html:/data/php/yxyy/html' #我的项目门路
  php:
    container_name: myphp
    image: php:7.2-fpm
    volumes:
      - '/data/php/yxyy/html/:/data/php/yxyy/html/'
      - '/usr/local/php7.2/:/usr/local/etc/'

通过一顿操作猛如虎,一看后果二百五,还是不行,此时都想把电脑砸了, 进入容器:

telnet 127.0.0.1 9000  #还是联不通,突发奇想,把 127.0.0.1 换成容器名称会怎么呢?telnet myphp 9000  #竟然能够了,此时一股幸福感悠然而生,幸福来得太忽然了

批改 nginx 配置,把 127.0.0.1 改为 myphp(容器名) 重启,高光时刻来了,然鹅。事实上我想多了,502 是解决了,404 萍水相逢

404

File not found

看到 404 我第一反馈门路不对,再三确认后门路没问题,想来只能是权限问题了,查看 nginx 日志:

*32 FastCGI sent in stderr: "Primary script unknown" while reading response header

ls -l查看的确是没权限,看到没权限会心一笑,小意思。给个 777 权限看看。后果很遗憾,还是不行,既然不行

那全副给 root 用户执行看看, 批改配置 nginx.conf , user = root, php-fmt 的 www.conf 配置,user = root group = root, 重启容器查看还是不行。查看容器日志docker logs phpxxx 显示

ERROR: [pool www] please specify user and group other than root

php 不能应用 root 执行,那全副改为nginx, 后果还是不行,

cat /etc/passwd查看没有此用户,只有 php 的 www-data 用户,批改 nginx 和 php 配置, 都改为 www-data 用户,重启。

终于能够了

退出移动版