Compartir a través de

更新 Azure 容器实例中的容器

在正常操作容器实例期间,你可能会发现有必要更新容器组中正在运行的容器。 例如,你可能希望更新一个属性(例如映像版本、DNS 名称或环境变量),或者刷新其应用程序已出现故障的容器中的属性。

通过使用至少一个已修改的属性重新部署现有组,来更新正在运行的容器组中的容器。 更新某个容器组时,该组中所有正在运行的容器会就地重启(通常在同一基础容器主机上进行)。

注意

已终止或已删除的容器组无法更新。 容器组终止(处于“成功”或“失败”状态)或被删除后,必须将该组作为新组进行部署。 请参阅其他限制

更新容器组

若要更新现有容器组,请执行以下操作:

  • 发出 create 命令(或使用 Azure 门户),指定现有组的名称
  • 修改或添加至少一个支持在重新部署时进行更新的组属性。 某些属性不支持更新
  • 使用先前提供的值设置其他属性。 如果未为某个属性设置值,则该属性将恢复为其默认值。

注意

如果将所有属性设置为之前提供的值,并且不修改或添加任何属性,则容器将重启以响应创建命令。

提示

YAML 文件有助于维护容器组的部署配置,你可以从其着手来部署已更新的组。 如果使用了其他方法来创建组,则可使用 az container export 将配置导出到 YAML。

示例

以下 Azure CLI 示例更新具有新 DNS 名称标签的容器组。 由于该组的 DNS 名称标签属性是可以更新的属性,因此会重新部署容器组,并重启其容器。

具有 DNS 名称标签 myapplication-staging 的初始部署:

# Create container group
az container create --resource-group myResourceGroup --name mycontainer \
    --image nginx:alpine --dns-name-label myapplication-staging

使用新的 DNS 名称标签“application”更新容器组,并使用先前使用的值设置其余属性:

# Update DNS name label (restarts container), leave other properties unchanged
az container create --resource-group myResourceGroup --name mycontainer \
    --image nginx:alpine --dns-name-label myapplication

更新的好处

更新现有容器组的主要好处是加快部署速度。 重新部署现有容器组时,会从前一部署缓存的层中提取该组的容器映像层。 此过程不会像新部署中一样从注册表中提取所有全新的映像层,而只会提取修改的层(如果有)。

如果更新容器组而不是删除再部署新的容器组,则基于大型容器映像的应用程序(例如 Windows Server Core)的部署速度会有明显的改善。

限制

  • 并非容器组的所有属性都支持更新。 若要更改某个容器组的某些属性,必须先删除,再重新部署该组。 请参阅需要容器删除操作的属性
  • 更新某个容器组时,该容器组中的所有容器都会重启。 无法对多容器组中的特定容器执行更新或就地重启。
  • 容器组的 IP 地址通常会在更新之后保留,但不能保证保持不变。 只要将容器组部署到相同的基础主机,容器组就会保留其 IP 地址。 有些 Azure 内部事件可能会导致容器组重新部署到其他主机,尽管这很少见。 为了避免此问题,建议对容器实例使用 DNS 名称标签。
  • 已终止或已删除的容器组无法更新。 容器组停止(处于“已终止”状态)或被删除后,该组将作为新组进行部署。

注意

如果 Azure 容器组附加到 Azure 存储配置文件,则更新命令可能无法正常工作。

需要容器删除操作的属性

并非所有容器组属性都可以更新。 例如,若要更改容器的重启策略,必须先删除容器组,然后再重新创建它。

更改以下属性需要先删除再重新部署容器组:

  • OS 类型

  • CPU、内存或 GPU 资源

  • 重启策略

  • 网络配置文件

重要

2021-07-01 API 版本起,网络配置文件已停用。 如果使用的是此版本或更新版本,请忽略与网络配置文件相关的任何步骤和操作。

删除再重新创建某个容器组时,不是“重新部署”该组,而是新建一个容器组。 将从注册表中全新提取所有映像层,而不是从前一个部署缓存的层中提取。 由于部署到不同的基础主机,容器的 IP 地址也可能会更改。

后续步骤

本文中多次提到了容器组。 Azure 容器实例中的每个容器部署在容器组中,容器组可以包含多个容器。 以下文章提供有关容器组的详细信息: