我在 docker swarm 的默认 nginx 配置(根据lets-nginx项目)中通过lets-nginx运行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
是一个烧瓶应用程序,在 swarm 覆盖网络的 5000 端口上运行backend
。
最初启动服务时,一切正常。但是,每当我api
以使api
容器在三个节点群中的节点之间移动的方式更新时,都nginx
无法将流量路由到新容器。
我可以在 nginx 日志中看到它坚持使用旧的内部 ip,例如 10.0.0.2,而新容器现在位于 10.0.0.4 上。
为了让 nginx “看到”新 IP,我需要重新启动 nginx 容器或docker exec
进入它和kill -HUP
nginx 进程。
有没有更好的自动方式让 nginx 容器刷新其名称解析?