假设我有一个 docker 镜像product-test:latest
。它在我的所有环境中都运行正常,没有任何障碍。但是当我将它推送到我的实例amazon-ecr
并将其拉取到我的amazon ec2
实例并尝试使用启动容器时。当我尝试比较镜像和本地服务器的历史记录()时product-test
,它会抛出错误,例如缺少zip
我的产品二进制文件。我知道有很多缺失。/tmp/product-*.zip
docker history product-test:latest
ec2
dev
layers
这是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 save
和docker load
命令来管理 Docker 镜像不是推荐的方法。如果你热衷于安全并且不想将图像推送到 Docker Hub,那么请考虑创建一个私有 Docker 存储库或将图像推送到 ECR。创建的 TAR 文件扁平化并缺少一些元数据。
最佳做法是:
创建私有 Docker 注册表或使用 ECR
使用静态文件和任何自定义二进制文件构建 Docker 映像
将 Docker 映像推送到您的私有注册表或 ECR
在 EC2 上,从私有 Docker 注册表或 ECR 中提取映像。
这样,您就避免了使用docker save
和docker load
命令时遇到的 Docker 文件系统层问题。