amazon-web-services - 无法将大型 Docker 镜像上传到 AWS ECR

标签 amazon-web-services docker amazon-ec2 aws-ecr

我正在创建一个 mongodb docker 镜像,其中包含我的组织主数据库的备份生产数据。但是,当我尝试向上推这个图像时,我遇到了这个错误。

[root@ip-1-2-3-4 inf-tool-docker-mongo]# docker push 1234567.dkr.ecr.us-east-1.amazonaws.com/inf-data-mongo:2.6-latest
The push refers to repository [1234567.dkr.ecr.us-east-1.amazonaws.com/inf-data-mongo]
e429ba9ffbf8: Pushing [==================================================>]  87.35GB/87.35GB
fbd84d2027f9: Pushing [==================================================>]  87.35GB/87.35GB
4f8f8804b65d: Pushed
140b510fa705: Pushed
a2f3704a5dbf: Pushed
c362c0ad1002: Pushed
16817a92834f: Pushed
5a637bac3303: Pushed
32f938d6fb4c: Pushed
70d8dfa3043e: Pushed
denied: Adding this part to the layer with upload id '1234567890-12345-12345-123456-12345' in the repository with name 'inf-data-mongo' in registry with id '1234567890' exceeds the maximum allowed size of a layer which is '10737418240'

我的图像大小约为 85gb-100gb,因为其中包含大量数据。 Docker 镜像运行良好,但是当我将其推送到 AWS ECR 时,出现此错误。

我在这里看到了服务限制页面:

https://docs.aws.amazon.com/AmazonECR/latest/userguide/service_limits.html

然而,它的措辞有点令人困惑。我真的没有什么可以在这里做的吗?当然,为了方便起见,我不是唯一想要发布大型 Docker 镜像的人吗?我前进的最佳途径是什么?

谢谢!

最佳答案

您可能应该将数据库内容存储在 S3 之类的地方,并将其与数据库 Docker 镜像分开发送。

通常一个 Docker 镜像只包含一个要运行的程序,如果有与之相关的持久状态(如数据库的数据),则单独存储。您将使用类似的东西运行您的图像

docker run --name mongo -v $PWD/mongo:/data mongo

一般来说,如果你这样做了,你可以docker stop容器,docker rm它,然后 docker run针对同一数据存储的新容器。如果那行得通,那么将数据移植到其他地方也行。

因此,我建议您使用未修改的数据库图像并单独分发其数据的工作流程。您可能想要一个类似于以下内容的引导脚本

#!/bin/sh
SNAPSHOT=mongo-snapshot-20180831
if [ ! -d $SNAPSHOT ]; then
  aws s3 cp s3://my-volume/mongo/$SNAPSHOT.tar.gz $SNAPSHOT.tar.gz
  tar xzf $SNAPSHOT.tar.gz
fi
docker run --name mongo -d -p 27017:27017 -v $PWD/$SNAPSHOT:/data mongo:4.1

当我过去尝试处理非常大的图像时,docker builddocker push即使在 2-4 GB 的图像上也遇到了您在此处描述的各种麻烦(网络故障、超时等,甚至只是将构建上下文复制到 Docker 守护程序中),我想说 Docker 真的只是不适用于任何以 GB 为单位大小的图像。

关于amazon-web-services - 无法将大型 Docker 镜像上传到 AWS ECR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52122812/

相关文章:

ios - 我应该如何为我的应用构建 Amazon Web Services?

php - 如何使用 nginx 反向代理 ssh 到我的远程 docker 容器

python - Crontab Python 脚本不工作

testing - 旨在使用 Docker 的客户端 API 测试方法的接口(interface)上出现错误类型错误

symfony - docker-container 中的 Nginx 不提供来自 Symfony3-app 的静态内容

java - 在 AWS EC2 Linux 上的 Java 进程中运行 PhantomJS

node.js - MongoDB 连接 EC2

amazon-web-services - 亚马逊 SES 中的电子邮件传送状态

amazon-web-services - AWS API 网关身份验证(Cognito 与自定义授权器)

javascript - AWS Cognito - 如何交换访问 token 的授权代码?