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
成功了
相关文章推荐
- (OK) NS-3—LXC-(Docker)—MANET——HOWTO Use Linux Containers to set up virtual networks
- docker1.10.3-jetty8-jersey1.x 构建微服务
- Docker (一) 运行容器
- docker中删除镜像的描述
- Mac OS下ssh连接docker的容器全流程
- Dockerfile详解
- centos安装docker容器
- 基于 Docker 的现代软件供应链
- 基于 Docker 的现代软件供应链
- (OK) Creates Docker-based Virtual PC containers for use inside GNS3 as end hosts.
- Docker的优势
- Running quagga docker container with GNS3
- Docker题外话
- (OK) Docker—GNS3—IMUNES—Linux
- Docker容器的数据管理
- {实战}Docker Machine + Compose + Swarm
- Docker之Docker Compose简化复杂容器应用的利器
- Docker之Docker Compose简化复杂容器应用的利器
- Rancher集群化docker管理平台部署、特性及破坏性测试。
- Docker部署Rancher Server-centos7