Web 服务器重启后,Windows Server Docker 容器无法连接到代理容器

kal*_*vis 5 network-programming nginx windows-server docker docker-compose

我有 2 个使用 Docker Compose 部署的 Windows Server Docker 容器。一个容器运行反向代理服务器,另一个容器运行 Web 服务器。Web 服务器提供一个简单的 index.html 页面。两者都在运行 Nginx。

运行时,一切都按预期工作。我可以通过代理访问内容。但是,如果我重新启动 Web 服务器,则会收到错误的网关错误。然后我需要重新启动代理以使其再次工作。

如何在无需重新启动代理的情况下使其正常工作?

Docker-撰写:

version: '3'

services: 
    web:
        build:
            context: ./web
            dockerfile: ./dockerfile
    proxy:
        build:
            context: ./proxy
            dockerfile: ./dockerfile
        ports:
            - "8089:80"
Run Code Online (Sandbox Code Playgroud)

代理Dockerfile:

FROM sixeyed/nginx:windowsservercore

COPY nginx.conf C:/nginx/conf
CMD C:\nginx\nginx.exe
Run Code Online (Sandbox Code Playgroud)

代理 nginx.config:

events {
}
http {
    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://web:80/;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

网络 Dockerfile:

events {
}
http {
    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://web:80/;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

网页 nginx.config:

events {
}

http {
    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

pyg*_*eek 2

问题

\n

webnginx.conf中container\xe2\x80\x99s中的引用proxy是指nginx服务器启动时引用的容器的up。当web重新启动时,旧 ip 变得不可用并使用新 ip,web然后更新容器引用,但是 nginx 服务器仍然引用旧 ip,因为配置更改仅在启动/重新启动时应用。

\n

解决方案

\n

当您的Web容器被替换时,您需要重新启动nginx代理服务器\xe2\x80\x94而不一定是容器\xe2\x80\x94。这可以通过使用 docker-gen 监视有关容器的元数据并在检测到更改时重新启动 nginx 来完成。幸运的是 nginx-proxy 可以为你做到这一点。nginx-proxy 维护得很好,是您必须自己维护此业务逻辑的替代方案。

\n

参考

\n

Nginx 代理: https: //github.com/nginx-proxy/nginx-proxy

\n