如果有多个实例的零停机容器更新,则docker-compose网络别名如何工作?

问题描述 投票:3回答:1

所以我有:

version: "3.6"

services:
  nginx:
    image: nginx
  app:
    image: node:latest

我的nginx配置是:

upstream project_app {
  server app:4000;
}

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://project_app;
  }

[为了在不停机的情况下更新容器(滚动更新),我首先将app服务升级为2:

docker-compose up -d --no-deps --scale app=2 --no-recreate app

它将沿着project_app_1创建project_app

但是在此步骤中,即使新的project_app_1容器准备就绪,所有流量都将流向以前的容器project_app

要同时使用它们,我需要运行docker-compose restart nginx

现在,流量是到project_appproject_app_1的路由器,这真的很酷。

我现在准备杀死现在已经过时的project_app

我的问题是:

  • 被杀死后我是否需要重新启动nginx,以确保all流量被路由到project_app_1还是有点自动?
  • http://app:4000起作用的事实是因为DNS主机名配置,对吗?在哪里可以了解更多?
  • 如果关闭发现在nginx中自动工作,是否没有办法使启动发现也自动以避免避免重新启动nginx,这会导致2秒钟的停机时间?

谢谢

PS:如果您对我使用的整个脚本感到好奇,我将其报告为on the associated github issue

docker nginx docker-compose docker-networking
1个回答
0
投票

您可以使用:

upstream project_app {
  server app:4000 down;
  server app1:4000 down;
}

如果应用程序关闭,则跳至app1,如果应用程序备份,请使用它。

© www.soinside.com 2019 - 2024. All rights reserved.