我正在编写一个用于创建 ECS 自动缩放集群的 terraform 脚本。
我创建了一个集群并向其中添加了 ec2 容器实例。我的任务定义文件包含一个来自私有(private) docker 存储库的图像。我浏览了 aws 官方文档并找到了 Private Registry Authentication 的页面
并尝试了那里描述的两种方法。
我将我的 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 优化图像中实现私有(private) docker 注册表身份验证,或者是否做错了什么。
请帮我解决这个问题。
最佳答案
when I try to pull the image manually I shows me an error that no image found
您遵循的方法向 ECS 代理提供私有(private)注册表凭据,但不向 Docker CLI(Docker CLI 将其凭据数据存储在不同的位置)。由于您已经为代理配置了凭据,因此您应该能够运行引用私有(private)注册表中的镜像的任务定义,而无需从 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
关于amazon-web-services - aws ecs 优化 AMI 中的私有(private) docker 注册表身份验证不成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36052334/