【发布时间】:2017-12-03 14:50:15
【问题描述】:
有时 nginx 服务器将请求转发到错误的 docker-compose 服务。
我有 docker-compose 配置
version: "3.0"
services:
proj-reader:
image: repositry:5000/my-company.com/proj-reader
ports:
- "28090:8080"
- "28095:5005"
proj-helpdesk:
image: repository:5000/my-company.com/proj-helpdesk
ports:
- "29080:8080"
- "29085:5005"
proj-frontend:
image: repository:5000/my-company.com/proj-frontend
ports:
- "80:80"
links:
- "proj-helpdesk:backend"
- "proj-reader:reader"
...
前端是一个带有 NodeJs 应用程序的 nginx 容器。我们有下一个 nginx 配置:
upstream backend {
server backend:8080;
keepalive 30;
}
upstream reader {
server reader:8080;
keepalive 30;
}
server {
listen 80;
client_max_body_size 2m;
server_name localhost;
root /usr/share/nginx/html;
location /api/ {
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_pass http://backend;
proxy_read_timeout 600;
}
location /web-callback/ {
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_pass http://reader;
}
}
有时我可以看到在其他服务中收到了对 /web-callback/ 的请求,而该请求未指向前端服务的链接部分。第一次我认为它是在我重新启动阅读器服务后发生的。但是昨天这种情况再次发生,我知道阅读器还没有重新启动。 它是什么?以及如何防止这种情况发生?
【问题讨论】:
-
用k8s,更好。
-
链接已过时,请使用服务名称 - github.com/docker/compose/issues/2831。
-
也使用Embedded DNS server in user-defined networks。在你的nginx配置中
resolver 127.0.0.11;
标签: docker nginx docker-compose docker-networking