使用Docker –net = host并通过主机名连接到其他容器

我想设置一个Nginx的反向代理,工作正常,但如果我设置network_mode: "host"它停止工作,因为它无法找到其他码头集装箱的主机名。 我有一个web容器和一个nginx容器。

我得到以下错误: reverseproxy_1 | nginx: [emerg] host not found in upstream "web:80" in /etc/nginx/nginx.conf:10 reverseproxy_1 | nginx: [emerg] host not found in upstream "web:80" in /etc/nginx/nginx.conf:10

我的Nginx conf文件是:

 worker_processes 1; events { worker_connections 1024; } http { sendfile on; upstream docker-web { server web:80; } server { listen 8080; location / { proxy_pass http://docker-web; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; } } } 

和我的docker-compose.yml文件是:

 version: '2' services: redis: image: "redis:alpine" web: depends_on: - redis build: .\app volumes: - .\app:/code restart: always reverseproxy: image: reverseproxy network_mode: "host" ports: - 8080:8080 depends_on: - web 

我需要将network_mode设置为主机,否则X-Forwarded-For会出错。

One Solution collect form web for “使用Docker –net = host并通过主机名连接到其他容器”

我设法通过使用Linux主机,而不是Windows,这意味着我不需要使用network_mode:“主机”。 我也必须改变我的Python代码

 request.environ.get('HTTP_X_REAL_IP', request.remote_addr) 

 request.environ['REMOTE_ADDR']