Amazon web services aws ecs优化AMI中的私有docker注册表身份验证未成功

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

我正在编写一个terraform脚本,用于创建ECS自动伸缩集群。 我已经创建了一个集群,并在其中添加了ec2容器实例。我的任务定义文件包含一个来自私有docker存储库的映像。我浏览了aws官方文档,找到了 并尝试了上述两种方法

  • 使用dockercfg
  • 码头工人之路
  • 我将ecs.config文件放在S3存储桶中,在实例启动期间,我将用户数据作为

    #!/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