Docker撰写networking:nginx中的主机名不parsing

我试图迁移我的堆栈使用版本2的docker-compose.yml,并遇到networking主机名未被nginx解决的问题。

我的堆栈包含一个nginx反向代理(在debian上:wheezy),它通过其他几个软件组件来提供安全内容,我不会详细讨论(参见下面的configuration)。

在版本1 yaml中,我使用docker链接的环境variables和LUA脚本一起将它们插入到nginx.conf(使用nginx-extras)中。 这在Docker容器的前面作为一个反向代理完美运行。

在版本2 yaml中,我使用由dockernetworking生成的主机名。 我能够成功地从容器内ping这些主机名,但是nginx无法解决它们。

2016/05/04 01:23:44 [error] 5#0: *3 no resolver defined to resolve ui, client: 10.0.2.2, server: , request: "GET / HTTP/1.1", host: "localhost" 

这是我目前的configuration:

泊坞窗,compose.yml:

 version: '2' services: # back-end api: build: . depends_on: - db - redis - worker environment: RAILS_ENV: development ports: - "3000:3000" volumes: - ./:/mmaps - /var/log/mmaps/api:/mmaps/log volumes_from: - apidata command: sh -c 'rm -rf /mmaps/tmp/pids/server.pid; rails server thin -b 0.0.0.0 -p 3000' # background process workers worker: build: . environment: RAILS_ENV: development QUEUE: "*" TERM_CHILD: "1" volumes: - ./:/mmaps - /var/log/mmaps/worker:/mmaps/log volumes_from: - apidata command: rake resque:work # front-end ui: image: magiandev/mmaps-ui:develop depends_on: - api ports: - "8080:80" volumes: - /var/log/mmaps/ui:/var/log/nginx # database db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: pewpewpew volumes_from: - mysqldata volumes: - /var/log/mmaps/db:/var/log/mysql # key store redis: image: redis:2.8.13 user: root command: ["redis-server", "--appendonly yes"] volumes_from: - redisdata volumes: - /var/log/mmaps/redis:/var/log/redis # websocket server monitor: image: magiandev/mmaps-monitor:develop depends_on: - api environment: NODE_ENV: development ports: - "8888:8888" # media server media: image: nginx:1.7.1 volumes_from: - apidata ports: - "3080:80" volumes: - ./docker/media/nginx.conf:/etc/nginx/nginx.conf:ro - /srv/mmaps/public:/usr/local/nginx/html:ro - /var/log/mmaps/mediapool:/usr/local/nginx/logs # reverse proxy proxy: build: docker/proxy ports: - "80:80" - "443:443" volumes: - /var/log/mmaps/proxy:/var/log/nginx apidata: image: busybox:ubuntu-14.04 volumes: - /srv/mmaps/public:/mmaps/public command: echo api data mysqldata: image: busybox:ubuntu-14.04 volumes: - /srv/mmaps/db:/var/lib/mysql command: echo mysql data redisdata: image: busybox:ubuntu-14.04 volumes: - /srv/mmaps/redis:/data command: echo redis data # master data # convenience container for backups data: image: busybox:ubuntu-14.04 volumes_from: - apidata - mysqldata - redisdata command: echo mmaps data 

nginx.conf

 worker_processes 1; events { worker_connections 1024; } http { # permanent redirect to https server { listen 80; rewrite ^ https://$host$request_uri? permanent; } server { listen 443 ssl; ssl on; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; location / { proxy_pass http://ui:80$request_uri; } location /monitor/ { proxy_pass http://monitor:8888$request_uri; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /api/ { client_max_body_size 0; proxy_pass http://api:3000$request_uri; } location /files/ { client_max_body_size 0; proxy_pass http://media:80$request_uri; } location /mediapool/ { proxy_pass http://media:80$request_uri; add_header X-Upstream $upstream_addr; if ($request_uri ~ "^.*\/(.*\..*)\?download=true.*$"){ set $fname $1; add_header Content-Disposition 'attachment; filename="$fname"'; } proxy_pass_request_headers on; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www; } } } # stay in the foreground so Docker has a process to track daemon off; 

一些阅读后,我试图使用'dnsmasq'并在nginx.conf中设置resolver 127.0.0.1 ,但我不能得到这个工作:

 2016/05/04 01:54:26 [error] 6#0: recv() failed (111: Connection refused) while resolving, resolver: 127.0.0.1:53 

有没有更好的方法来configurationNginx的代理传递给我的容器与V2的工作?

您可以重命名您的容器并按名称parsing。