Amazon web services aws ecs优化AMI中的私有docker注册表身份验证未成功
我正在编写一个terraform脚本,用于创建ECS自动伸缩集群。 我已经创建了一个集群,并在其中添加了ec2容器实例。我的任务定义文件包含一个来自私有docker存储库的映像。我浏览了aws官方文档,找到了 并尝试了上述两种方法Amazon web services aws ecs优化AMI中的私有docker注册表身份验证未成功,amazon-web-services,amazon-ec2,docker,aws-ec2,amazon-ecs,Amazon Web Services,Amazon Ec2,Docker,Aws Ec2,Amazon Ecs,我正在编写一个terraform脚本,用于创建ECS自动伸缩集群。 我已经创建了一个集群,并在其中添加了ec2容器实例。我的任务定义文件包含一个来自私有docker存储库的映像。我浏览了aws官方文档,找到了 并尝试了上述两种方法 使用dockercfg 码头工人之路 我将ecs.config文件放在S3存储桶中,在实例启动期间,我将用户数据作为 #!/bin/bash yum install -y aws-cli aws s3 cp s3://<my_bucket_name>/ec
#!/bin/bash
yum install -y aws-cli
aws s3 cp s3://<my_bucket_name>/ecs.config /etc/ecs/ecs.config
登录到容器实例时,我在我的/etc/ecs/ecs.config中找到了数据,但当我尝试手动拉取映像时,我显示了一个找不到映像的错误
然后我在那个里尝试docker登录命令,手动输入我的凭证,然后再次尝试拉取那个图像,最终成功了
我不确定是否有办法通过用户数据在ecs优化映像中自动实现私有docker注册表身份验证,或者我是否做错了什么
请帮我解决这个问题
当我试图手动提取图像时,我显示了一个错误,没有找到图像
您所遵循的方法向ECS代理提供私有注册表凭据,但不向Docker CLI提供凭据(Docker CLI将其凭据数据存储在其他位置)。由于您已经为代理配置了凭据,因此应该能够运行引用私有注册表中映像的任务定义,而无需手动从Docker CLI中提取映像
编辑:
由于引用echo
命令的方式,实例上的/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
到
感谢Samuel的回复,但ecs代理无法获取该映像。您能检查一下主机上的/etc/ecs/ecs.config中到底出现了什么吗?看起来您的引号在您的
echo“ECS\u ENGINE\u AUTH\u DATA…
中可能工作不正常。如果您将整个事件周围的双引号更改为单引号(如echo'ECS\u ENGINE\u AUTH\u DATA={”https://...
它可能会解决您的问题。错误状态为“已停止(任务中的基本容器已退出)”。我还添加了我的错误页面的屏幕截图,可能会对您有所帮助。我已编辑了我的答案,以显示您的用户数据脚本中可能存在的错误。您将希望通过ssh连接到实例,并查看文件/etc/ecs/ecs.config
,以查看其是否正确。谢谢sam,我已将双引号改为单引号。
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