如何将S3 docker store用于ECS?

问题描述

我们正在使用S3存储桶作为Docker注册表。如果要在实例或内部服务器中使用它,请设置注册表然后使用它。现在,我们将移至ECS。我们如何将S3码头商店与ECS集成在一起?

还有一个问题,认为这与上下文无关。 我们使用公共S3存储桶作为注册表,并使用以下docker命令

docker run -d -p 5000:5000 -e REGISTRY_STORAGE_S3_ACCESSKEY=###aws-access-key### -e REGISTRY_STORAGE_S3_SECRETKEY=###aws-secret-key### -e REGISTRY_STORAGE=s3 -e REGISTRY_STORAGE_S3_REGION=us-east-1 -e REGISTRY_STORAGE_S3_BUCKET=bucket-name -e REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR=inmemory --name registry registry:2

但是,如果我们按以下方式使用它而不使用访问密钥和秘密密钥,尽管它是一个公共存储桶,但我想知道为什么它不起作用

docker run -d -p 5000:5000 -e REGISTRY_STORAGE=s3 -e REGISTRY_STORAGE_S3_REGION=us-east-1 -e REGISTRY_STORAGE_S3_BUCKET=bucket-name -e REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR=inmemory --name registry registry:2

这是我的s3存储桶策略。

{
    "Version": "2012-10-17","Statement": [
        {
            "Effect": "Allow","Principal": {
                "AWS": "*"
            },"Action": [
                "s3:ListBucket","s3:GetBucketLocation","s3:ListBucketMultipartUploads"
            ],"Resource": "arn:aws:s3:::bucket-name"
        },{
            "Effect": "Allow","Action": [
                "s3:PutObject","s3:Getobject","s3:DeleteObject","s3:ListMultipartUploadParts","s3:AbortMultipartUpload"
            ],"Resource": "arn:aws:s3:::bucket-name/*"
        }
    ]
}

解决方法

您是否考虑过迁移到AWS ECR? 这比使用S3作为Docker注册表要简单得多,您还可以应用生命周期规则等。

无论如何,将S3用作ECS注册表都应与从其他来源使用。您只需要确保您的实例可以访问它即可(例如,创建VPC Endpoint)。