当前位置: 首页 > 知识库问答 >
问题:

如何将更新的Docker映像部署到Amazon ECS任务?

萧远
2023-03-14

一旦所说的图像在相应的注册表中被更新,那么让我的亚马逊ECS任务更新其Docker图像的正确方法是什么?

共有3个答案

杜晨朗
2023-03-14

注册新的任务定义并更新服务以使用新的任务定义是AWS推荐的方法。最简单的方法是:

  1. 导航到任务定义
  2. 选择正确的任务
  3. 选择创建新修订
  4. 如果您已经使用:latest标记之类的内容提取最新版本的容器图像,那么只需单击Create。否则,请更新容器映像的版本号,然后单击“创建”
  5. 展开操作
  6. 选择更新服务(两次)
  7. 然后等待服务重新启动

本教程提供了更多详细信息,并描述了如何将上述步骤融入到端到端产品开发过程中。

全面披露:本教程以Bitnami的容器为特色,我为Bitnami工作。然而,这里表达的想法是我自己的,而不是Bitnami的观点。

杜哲彦
2023-03-14

每次启动任务时(通过启动任务(StartTask)和运行任务(RunTask)API调用或作为服务的一部分自动启动),ECS代理都会对任务定义中指定的图像执行docker pull操作。如果每次推送到注册表时使用相同的映像名称(包括标记),则应该能够通过运行新任务来运行新映像。请注意,如果Docker由于任何原因(如网络问题或身份验证问题)无法访问注册表,ECS代理将尝试使用缓存的映像;如果要避免在更新图像时使用缓存的图像,则每次都要将不同的标记推送到注册表,并在运行新任务之前相应地更新任务定义。

更新:现在可以通过ECS代理上设置的环境变量ECS\u IMAGE\u PULL\u behavior来调整此行为。有关详细信息,请参阅文档。截至撰写本文时,支持以下设置:

用于为容器实例自定义拉取映像过程的行为。以下描述了可选行为:

>

  • 如果指定了默认值,则会远程拖动图像。如果映像拉取失败,那么容器将在实例上使用缓存的映像。

    如果指定了始终,则始终远程拖动图像。如果映像拉取失败,则任务失败。此选项可确保始终提取最新版本的图像。任何缓存的图像都将被忽略,并接受自动图像清理过程。

    如果指定一旦,则仅当同一容器实例上的前一个任务没有拉取图像或缓存的图像被自动图像清理过程删除时,才会远程拉取图像。否则,将使用实例上的缓存图像。这确保不会尝试不必要的图像拉动。

    如果指定了首选缓存图像,则如果没有缓存图像,则会远程拉取图像。否则,将使用实例上的缓存映像。已禁用容器的自动图像清理,以确保不会删除缓存的图像。

  • 常雪风
    2023-03-14

    如果任务在服务下运行,则可以强制进行新部署。这将强制重新评估任务定义并提取新的容器映像。

    aws ecs update-service --cluster <cluster name> --service <service name> --force-new-deployment
    
     类似资料:
    • 问题内容: 我确实使用单个pod进行了部署,并使用了我的自定义docker映像,例如: 在开发过程中,我想推送新的最新版本并更新Deployment。如果没有显式定义标签/版本并为每个版本增加它,就找不到方法。 问题答案: 您可以为Pod配置宽限期(例如30秒或更长时间,具体取决于容器启动时间和图像大小)并进行设置。并使用。将创建一个新容器,并自动下载最新的映像,然后终止旧容器。 例: 我目前正在

    • 当我试图将包含一个简单的streamlit应用程序的Docker映像部署到Heroku时,我遇到了一些初期问题。我的问题是,部署后我无法访问我的Docker。经过仔细观察,我发现了以下错误: 错误R10(启动超时)- 我研究并了解到这是因为端口不可用,因为Heroku将动态分配端口号。 我在Dockerfile中添加了以下内容,以确保不会发生这种情况。 我现在可以看到网络URL和外部URL端口号是

    • 问题内容: 我正在通过创建带有一些nodejs指令的来玩docker。现在,每次更改dockerfile时,我都会通过在项目文件夹中运行来重新创建映像,但这每次都会创建一个新映像,并很快吞没我的ssd。 更改dockerfile时,是否有一种方法可以更新现有映像,或者每次更改文件时都被迫创建一个新映像? 抱歉,这是一个愚蠢的问题 问题答案: 只要没有指令,Docker构建支持缓存。如果您正在积极地

    • 问题内容: 每次部署之前,我都有一个要用以下命令更新的映像。 此命令将覆盖先前的图像。我如何备份此映像(或在不提交到网络存储库的情况下,在本地将其更改为其他标签?如果有任何问题,我可以还原备份。 问题答案: 如何备份这张图片 只需使用docker save 命令。 您稍后将可以使用docker load 命令将其还原。 还是将其更改为本地的其他标签,而无需提交网络存储库? 使用docker tag

    • 首先,我在AWS中创建了一个包含Docker映像的存储库。 然后我创建了一个任务定义和一个ECS/EC2集群。最后,我使用集群和任务定义创建了一个服务。工作正常。 如何在现有集群上重新部署更新的Docker映像? 仅仅用新的(或现有的)任务“更新”服务是行不通的。即使使用“强制新部署”选项也没有效果。

    • 问题内容: 假设我有一个基于的琐碎容器。现在有一个安全更新,并在docker repo中进行了更新。 我怎么知道我的本地映像及其容器在后面运行? 是否有一些最佳实践来自动更新本地映像和容器以跟随docker repo更新,实际上,这会给您带来与在常规ubuntu机器上运行无人值守升级一样的好处。 问题答案: 一种方法是通过CI / CD系统来驱动它。构建父映像后,请使用该父映像扫描git repo