4

我正在编写一个用于创建 ECS 自动缩放集群的 terraform 脚本。我创建了一个集群并向其中添加了 ec2 容器实例。我的任务定义文件包含一个来自私有 docker 存储库的图像。我浏览了 aws 官方文档并找到了一个私有注册表身份验证页面 并尝试了这两种方法如那里所述。

  1. 使用 dockercfg
  2. 码头工人的方式

我将我的 ecs.config 文件放在 S3 存储桶中,在实例启动期间,我将用户数据传递为

#!/bin/bash
yum install -y aws-cli
aws s3 cp s3://<my_bucket_name>/ecs.config /etc/ecs/ecs.config

在我的第二种方法中,我将使用过的数据传递为

echo "ECS_ENGINE_AUTH_TYPE=docker" >>/etc/ecs/ecs.config
echo "ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}"  >>/etc/ecs/ecs.config

登录到我的容器实例时,我在 /etc/ecs/ecs.config 中找到了数据,但是当我尝试手动提取图像时,我向我显示了一个找不到图像的错误。

然后我在那里尝试 docker login 命令并手动输入我的凭据并尝试再次拉取该图像并最终成功。

我不确定是否有办法通过用户数据自动在 ecs 优化映像中实现私有 docker 注册表身份验证,或者是否做错了什么。

请帮我解决这个问题。

在此处输入图像描述

4

1 回答 1

4

当我尝试手动提取图像时,我向我显示未找到图像的错误

您遵循的方法向 ECS 代理提供私有注册表凭据,但不向 Docker CLI(Docker CLI 将其凭据数据存储在不同的位置)。由于您已经为代理配置了凭据,因此您应该能够运行引用私有注册表中的映像的任务定义,而无需从 Docker CLI 手动拉取映像。

/etc/ecs/ecs.config编辑:由于您引用echo命令的方式,您的实例上的文件中可能有错误。您需要更改此行:

echo "ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}"  >>/etc/ecs/ecs.config

echo 'ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}'  >>/etc/ecs/ecs.config
于 2016-03-17T05:41:06.047 回答