如何更新 Amazon ECS 容器代理上的私有存储库凭证?

上次更新时间:2019 年 5 月 22 日

如何更新 Amazon Elastic Container Service (Amazon ECS) 容器代理上通过环境变量或 AWS Secrets Manager 提供的私有存储库凭证?

简短描述

您可以在 Amazon ECS 任务定义中通过环境变量或使用 Secrets Manager 来为 Amazon ECS 容器代理提供私有存储库凭证。选择以下任一选项:

  • 如果您使用实例用户数据和环境变量来提供私有存储库凭证,则请按照通过环境变量更新私有存储库凭证部分中的步骤执行操作。
  • 如果您使用 Secrets Manager 提供私有存储库凭证,则请按照使用 AWS Secrets Manager 更新私有存储库凭证部分中的步骤执行操作。

解决方法

通过环境变量更新私有存储库凭证

1.    连接到您的容器实例

2.    要了解如何为 Amazon ECS 容器代理提供 Docker 凭证,请运行以下命令:

$ cat /etc/ecs/ecs.config

此命令将返回 /etc/ecs/ecs.config 文件的内容。

如果将 ECS_ENGINE_AUTH_TYPE 变量的值设置为 docker,则您可按纯文本形式将 Docker 凭证直接传递到 Amazon ECS 容器代理。接下来,请执行设置纯文本凭证部分中的步骤。

如果将该变量设置为 dockercfg,则您可按 Docker 生成的身份验证值(由 Docker 登录命令生成)的形式传递 Docker 凭证。接下来,请执行获取新的 Docker 身份验证值部分中的步骤。

设置纯文本凭证

1.    要更新 ECS_ENGINE_AUTH_DATA 变量,请运行以下命令:

$ sudo vi /etc/ecs/ecs.config

2.    在 vi 编辑器中,将 ECS_ENGINE_AUTH_DATA 变量的值更新为您当前的 Docker 用户名、密码和电子邮件地址(均采用纯文本形式)。请参阅以下示例文件:

ECS_CLUSTER=TestECSCluster
ECS_ENGING_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"user","password":"Password","email":"awsSampleEmail@amazon.com"}}

接下来,请执行重新启动 ECS 代理部分中的步骤。

获取新的 Docker 身份验证值

1.    要本地登录 Docker,请运行以下命令,然后输入您的新凭证:

$ docker login

2.    要串联您的 config.json 文件,请运行以下命令,然后再复制 Docker 生成的身份验证密钥值。

$ cat ~/.docker/config.json

3.    要更新 ECS_ENGINE_AUTH_DATA 变量,请运行以下命令:

$ sudo vi /etc/ecs/ecs.config

4.    在 vi 编辑器中,将 ECS_ENGINE_AUTH_DATA 变量的值更新为步骤 2 中的 Docker 身份验证密钥值。请参阅以下示例文件:

ECS_CLUSTER=TestECSCluster
ECS_ENGING_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth","a2vpdGhhd3M6UGFzc3dvcmQ="}}

接下来,请执行重新启动 ECS 容器代理部分中的步骤。

重启 ECS 容器代理

1.    要重新启动 Amazon ECS 容器代理,请根据运行您的容器实例的 Amazon 系统映像 (AMI) 来运行以下任一命令。

Amazon Linux ECS 优化的 AMI:

$ sudo stop ecs && sudo start ecs

Amazon Linux 2 ECS 优化的 AMI:

$ sudo systemctl restart ecs

注意:要更新 ECS 集群中的其他容器实例上的 /etc/ecs/ecs.config 文件,请返回通过环境变量更新私有存储库凭证部分。然后,对每个容器实例执行更新流程。

接下来,请执行测试更新的私有存储库凭证部分中的步骤。

使用 AWS Secrets Manager 更新私有存储库凭证

1.    打开 Secrets Manager 控制台

2.    选择您的密钥,然后选择检索密钥值

3.    选择编辑

4.    更新已存储的私有注册表凭证,然后选择保存

接下来,请执行测试更新的私有存储库凭证部分中的步骤。

测试更新的私有存储库凭证

以下步骤假定您在集群中部署更新后的映像。

1.    打开 Amazon ECS 控制台

2.    在导航窗格中,选择集群,然后选择您的集群。

3.    选择您的服务,然后选择更新

4.    选择强制执行新部署复选框。

5.    对于最低正常运行百分比,请输入 50

6.    完成安装向导中的其余步骤,然后选择更新服务

7.    选择查看服务

8.    在部署选项卡上,查看新的部署。Amazon ECS 会逐渐停止前一部署的任务,然后在新部署下重新启动这些任务,同时尝试执行新的映像拉取。

注意:步骤 8 假定集群具有足够的资源来成功执行滚动更新部署类型。

9.    选择任务选项卡,然后检查每个单独的任务及其状态。

如果任务状态设置为正在运行,则表示该服务已成功更新此任务且无错误。

如果任务状态设置为正在运行 (CannotPullContainerError),则表示该服务已更新此任务,但存在错误。Amazon ECS 容器代理无法拉取新容器映像,并且使用旧的缓存映像。验证您的凭证是否已更新,然后再次执行服务部署更新。

注意:要显示任务的完整详细信息,并查看“拉取访问被拒绝”错误,请选择您的各个任务状态的下拉箭头。请参阅以下示例:

CannotPullContainerError: Error response from daemon: pull access denied for user/reponame, repository does not exist or may require 'docker login'

这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?