使用 Docker --net=host 并通过主机名连接到其他容器
Use Docker --net=host and connect to other containers by hostname
我想设置一个 Nginx 反向代理,它工作正常,但如果我设置 network_mode: "host"
它停止工作,因为它无法找到其他 docker 容器的主机名。我有一个 web
容器和一个 nginx
容器。
我收到以下错误:
reverseproxy_1 | nginx: [emerg] host not found in upstream "web:80" in /etc/nginx/nginx.conf:10
我的 Nginx 配置文件是:
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
会出错。
我设法通过使用 Linux 主机而不是 Windows 来让它工作,这意味着我不需要使用 network_mode: "host"。我还必须将 Python 代码更改为
request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
来自
request.environ['REMOTE_ADDR']
我想设置一个 Nginx 反向代理,它工作正常,但如果我设置 network_mode: "host"
它停止工作,因为它无法找到其他 docker 容器的主机名。我有一个 web
容器和一个 nginx
容器。
我收到以下错误:
reverseproxy_1 | nginx: [emerg] host not found in upstream "web:80" in /etc/nginx/nginx.conf:10
我的 Nginx 配置文件是:
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
会出错。
我设法通过使用 Linux 主机而不是 Windows 来让它工作,这意味着我不需要使用 network_mode: "host"。我还必须将 Python 代码更改为
request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
来自
request.environ['REMOTE_ADDR']