nginx不会自动获取群集中的dns更改

我通过docker swarm中的缺省nginxconfiguration(根据lets-nginx项目)中的let-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是一个在群集覆盖networkingbackend上运行5000端口的应用程序。

当服务最初启动时,一切正常。 然而,每当我更新api使api容器在三个节点群中的节点之间移动时, nginx无法将stream量路由到新的容器。

我可以看到在nginx日志中,当新的容器现在在10.0.0.4上时,它粘在旧的内部IP上,例如10.0.0.2。

为了让nginx'看到'新的IP,我需要重新启动nginx容器或docker exec到它并kill -HUP nginx进程。

是否有一个更好的自动的方法,使nginx容器刷新其名称parsing?

感谢@ Moema的指针,我想出了一个解决scheme。 let-nginx的默认configuration需要调整如下,以使nginx获取IP更改:

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

这使用docker swarm的parsing器与TTL并设置一个variables,迫使nginx刷新群体中的名称查找。