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
。
サービスが最初に起動されると、すべて正常に動作します。ただし、3 つのノード群のノード間でコンテナーを移動api
するように を更新するたびに、トラフィックを新しいコンテナーにルーティングできません。api
nginx
nginx ログで、新しいコンテナーが 10.0.0.4 にあるときに、古い内部 IP (たとえば 10.0.0.2) に固執していることがわかります。
nginx が新しい IP を「認識」できるようにするには、nginx コンテナーを再起動するか、nginx コンテナーdocker exec
とkill -HUP
nginx プロセスを再起動する必要があります。
nginx コンテナの名前解決を自動的に更新するより良い方法はありますか?