您的位置:首页 > 运维架构 > Docker

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

2016-05-13 00:07 751 查看

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


挂载成功

如果把挂载资源放在php-fpm/container 并用 –link 连接nginx,再使用–volumes-from将php/container的挂载目录挂载到nginx

//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


成功了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: