将 Docker 镜像推送到 aws-ecr 后,它并未包含所有层

将 Docker 镜像推送到 aws-ecr 后,它并未包含所有层

假设我有一个 docker 镜像product-test:latest。它在我的所有环境中都运行正常,没有任何障碍。但是当我将它推送到我的实例amazon-ecr并将其拉取到我的amazon ec2实例并尝试使用启动容器时。当我尝试比较镜像和本地服务器的历史记录()时product-test,它会抛出错误,例如缺少zip我的产品二进制文件。我知道有很多缺失。/tmp/product-*.zipdocker history product-test:latestec2devlayers

这是Dockerfile我创建该图像的片段。

MAINTAINER [email protected]

ARG binaries

COPY $binaries/.m2  /root/
ADD $binaries/product-*.zip /tmp/

我也尝试过使用docker save -o product-test_latest.tar product-test:latest和 on 来Amazon ec2加载该图像,docker load --input /home/centos/product-test_latest.tar但仍然面临同样的问题。我的 docker 图像中的一些内容没有进入我的 amazon 实例。我面临的问题真的很奇怪。

亚马逊EC2:docker --version: 1.12.6, build ec8512b/1.12.6

操作系統:CentOS Linux release 7.4.1708 (Core)

我的本地开发服务器:docker --version: 1.13.1-cs2, build ad32da7

操作系統:Red Hat Enterprise Linux Server release 7.2 (Maipo)

我应该检查哪些可能的问题?非常感谢。谢谢

答案1

使用docker savedocker load命令来管理 Docker 镜像不是推荐的方法。如果你热衷于安全并且不想将图像推送到 Docker Hub,那么请考虑创建一个私有 Docker 存储库或将图像推送到 ECR。创建的 TAR 文件扁平化并缺少一些元数据。

最佳做法是:

  • 创建私有 Docker 注册表或使用 ECR

  • 使用静态文件和任何自定义二进制文件构建 Docker 映像

  • 将 Docker 映像推送到您的私有注册表或 ECR

  • 在 EC2 上,从私有 Docker 注册表或 ECR 中提取映像。

这样,您就避免了使用docker savedocker load命令时遇到的 Docker 文件系统层问题。

相关内容