gpt4 book ai didi

networking - Docker Compose网络:nginx中的主机名无法解析

转载 作者:行者123 更新时间:2023-12-02 20:31:31 27 4
gpt4 key购买 nike

我试图迁移我的堆栈以使用版本2 docker-compose.yml,但遇到了Nginx无法解析网络主机名的问题。

我的堆栈涉及一个nginx反向代理(位于debian:wheezy上),该代理通过其他几个我将不详述的软件组件(请参见下面的配置)来提供安全内容。

在版本1 yaml中,我将docker链接中的环境变量与LUA脚本一起使用,以将它们插入到nginx.conf中(使用nginx-extras)。这非常适合作为docker容器前面的反向代理。

在版本2 yaml中,我使用的是docker网络生成的主机名。我能够从容器内成功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"

这是我当前的配置:

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

有没有更好的方法来配置nginx以代理传递给与V2一起使用的容器?

最佳答案

您可以重命名容器并按名称进行解析。

关于networking - Docker Compose网络:nginx中的主机名无法解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37040146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com