167 docker docker构建nginx容器系列问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fancivez/article/details/51388837

docker构建nginx容器系列问题


background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑

1.nginx服务器根目录问题

docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同

eg:

run一个niginx容器

//80端口被占用,so...
$ sudo docker run -it -p 800:800 nginx
$ sudo docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
1801a32aab54        nginx               "nginx -g 'daemon off"   2 minutes ago       Up 2 minutes        80/tcp, 443/tcp, 0.0.0.0:800->800/tcp   berserk_kare

进入容器内部

$ sudo docker exec -it 1801a32aab54 /bin/bash
root@1801a32aab54:/# 

查看nginx目录

# cd /etc/nginx/
conf.d/         koi-utf         mime.types      nginx.conf      uwsgi_params    
fastcgi_params  koi-win         modules/        scgi_params     win-utf  

可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled

继续查看nginx配置

# cat /conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    #...省略php-fpm配置,好长..
}

根目录配置: root /usr/share/nginx/html;

测试

# cd /usr/share/nginx/html
# touch index.html
# echo "test nginx in docker" >index.html

在浏览器中输入localhost或者在terminal中

curl localhost

2.php-fpm配置相关:请求php文件报502

首先发现php配置的目录结构和ubuntu还是不一样,dockerfile里面配置改为如下

ADD php.ini    /usr/local/etc/php/php.ini
ADD php-fpm.conf    /usr/local/etc/php-fpm.conf

进入nginx容器

$ docker ps 
# docker exec -it xxx /bin/bash

进入niginx的log

# cd /var/www/log
# tail -f error.log 

显示为空,log路径找错了

# cd /opt/log/nginx
# tail -f error.log

2016/05/13 03:19:59 [crit] 6#6: *28 connect() to unix:/run/php/php7.0-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 172.17.0.1, server: _, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "localhost"

可见问题是 连接不到 /run/php/php7.0-fpm.sock ,nginx和php并不在同一个主机中,Domain socket通信当然无法实现


3. 配置php和nginx容器连接 并共享挂载文件资源

举个栗子 将hsot文件资源挂载到在nginx的container

//将host中的workspace挂载到container的服务器根目录 此处的nginx配置被我修改过 所以image名字是mynginx
# docker run -it -p 80:80 -v 
/home/jason/workspace:/var/www/html mynginx

在host的workspace目录中新增index.html 并访问

$ cd ~/workspace && touch index.html
$ echo "index in host">index.html

//先关闭host的nginx服务再执行这一步
$ curl localhost
index in host 

挂载成功

//run 一个php-fpm容器 并挂载host内的目录
# docker run -p 9000:9000 -v ~/opt:/var/www --name phpfpm -it fancive/php
//run 一个nginx容器并与php容器连接
# docker run --name nginx_server -d -p 80:80 --link phpfpm:phpfpm --volumes-from phpfpm  fancive/nginx

测试一下

$ curl localhost
index in host

成功了

展开阅读全文

没有更多推荐了,返回首页