首页 > 解决方案 > docker-compose:更改 azure 注册表中的图像时需要 2-3 分钟的停机时间

问题描述

我设置了以下应用程序:

version: '3'
services:
  nginx: 
    image: myregistry.azurecr.io/nginx:latest
    container_name: nginx
    ports:
      - 80:80
      - 443:443

  app2:
    image: myregistry.azurecr.io/app2:latest
    container_name: app2
    expose: 
      - 8080

nginx.conf:

events {
}
http{
server {
listen 80 default_server;
location / {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    proxy_pass http://app2:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

而且效果很好:反向代理在提供内容之前会询问用户名/密码。

现在,app2 不断变化,我设置了一个脚本,将新图像上传到 azure 注册表。

我的痛苦来了:每次我上传新版本时,我都会收到 502 - 来自 nginx 的网关错误大约 2-3 分钟。

在此时间之后,应用程序再次可用。怎么来的?有没有办法防止它?azure 向我承诺的 24/7 在哪里?:(

标签: azuredocker

解决方案


当您更新容器设置的某些部分时,在这种情况下,容器会重新启动映像,这取决于您的应用程序需要多少时间才能重新启动。考虑使用docker swarm滚动更新来减少停机时间或优化您的应用程序。

NGINX 还缓存 DNS 查询,因此它可能仍会在很长一段时间内指向停止的容器,直到缓存更新。有关更多详细信息,请参阅此文档条目


推荐阅读