gpt4 book ai didi

docker - nginx 不会自动获取 swarm 中的 dns 更改

转载 作者:行者123 更新时间:2023-12-02 13:14:26 28 4
gpt4 key购买 nike

我通过 lets-nginx 运行 nginx在 docker swarm 中的默认 nginx 配置(根据lets-nginx 项目)中:

服务:

  ssl:
image: smashwilson/lets-nginx
networks:
- backend
environment:
- EMAIL=sas@finestructure.co
- DOMAIN=api.finestructure.co
- UPSTREAM=api:5000
ports:
- "80:80"
- "443:443"
volumes:
- letsencrypt:/etc/letsencrypt
- dhparam_cache:/cache

api:
image: registry.gitlab.com/project_name/image_name:0.1
networks:
- backend
environment:
- APP_SETTINGS=/api.cfg
configs:
- source: api_config
target: /api.cfg
command:
- run
- -w
- tornado
- -p
- "5000"

api 是一个 Flask 应用程序,在 Swarm 覆盖网络后端 的端口 5000 上运行。

当服务最初启动时,一切正常。但是,每当我以使得 api 容器在三节点群中的节点之间移动的方式更新 api 时,nginx 都无法路由流量到新容器。

我可以在 nginx 日志中看到它坚持旧的内部 IP,例如 10.0.0.2,而新容器现在位于 10.0.0.4。

为了让 nginx“看到”新 IP,我需要重新启动 nginx 容器或 docker exec 进入其中并kill -HUP nginx 进程。

是否有更好的自动方法让 nginx 容器刷新其名称解析?

最佳答案

感谢@Moema 的指点,我已经找到了解决方案。 let-nginx 的默认配置需要进行如下调整,以使 nginx 能够接收 IP 更改:

  resolver 127.0.0.11 ipv6=off valid=10s;
set $upstream http://${UPSTREAM};
proxy_pass $upstream;

这使用 docker swarm 的解析器和 TTL 并设置一个变量,强制 nginx 刷新 swarm 中的名称查找。

关于docker - nginx 不会自动获取 swarm 中的 dns 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46660436/

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