【问题标题】:Docker image different size when pushed to ECR than locally推送到 ECR 时的 Docker 映像大小与本地不同
【发布时间】:2019-07-31 22:21:18
【问题描述】:

我的本​​地机器上有一个 1.46GB 的 docker 映像,但是当它被推送到 AWS ECR(通过我的本地机器或通过 CicleCI 部署)时,它只有 537.05MB。我对 Docker 和 AWS 还很陌生,所以如果能帮助我弄清楚为什么会这样,我将不胜感激!

我感觉它没有完全上传到 ECR,因为我正在尝试将此容器用于批处理作业,但由于某种原因,在本地使用时有效的相同命令在用于工作定义。该命令只是python app.py,但我也尝试过使用绝对路径python /usr/local/src/app/app.py,两者都导致[Errno 2] No such file or directory

我的 Makefile 部署中使用的命令如下:

docker build --force-rm=true -t $(EXTRACTOR_IMAGE_NAME) ./extractor
docker tag $(EXTRACTOR_IMAGE_NAME) $(EXTRACTOR_ECR_IMAGE_NAME)
$(shell aws ecr get-login --no-include-email)
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/$(EXTRACTOR_ECR_REPO)

编辑 1: 我认为这可能与基本图像的大小有关,在本例中为 python:2.7。基础镜像是 914MB,加上我的 ECR 镜像 537.05MB = 1451.05MB,即大约 1.46GB。仍然不确定 Batch 命令的问题是什么......

编辑 2: 我一直在使用卷将代码安装到我的容器中,这就是为什么它一直在本地工作。在构建时,我忘记将代码复制到容器中,我认为这是无法批处理的唯一原因!

【问题讨论】:

  • 是否压缩
  • 我不确定 ECR 是否将图像存储为压缩...我将尝试在本地压缩以检查大小。

标签: amazon-web-services docker aws-batch amazon-ecr


【解决方案1】:

这可能是由于 docker 客户端在将图像作为 documented 推送到 ECR 之前的行为:

从 Docker 版本 1.9 开始,Docker 客户端会在将镜像层推送到 V2 Docker 注册表之前对其进行压缩。 docker images 命令的输出显示未压缩的图像大小,因此它可能返回比 AWS 管理控制台中显示的图像大小更大的图像大小。

所以当你拉取图像时,你会注意到图像层经历了三个阶段:

  • 正在下载
  • 提取
  • 完成

关于这个命令:python /usr/local/src/app/app.py 正在执行它,而你在 /usr/local/src/app/ 中?您可能需要确保在推送之前先使用图像检查容器内的命令,因为错误似乎与代码相关,而不是 docker 问题

【讨论】:

  • 我的 Dockerfile 中的命令是 CMD ["python", "app.py"],它在 WORKDIR /usr/local/src/app 之后运行。我将使用 Dockerfile 更新 OP。如果我在本地机器上docker run 我的容器而不覆盖来自 Dockerfile 的命令,那么它会按预期工作。
  • 我刚刚检查了我的 Dockerfile,似乎我一直是个傻孩子。我忘记了在开发中我一直在将我的代码安装在一个卷中,因此它为什么在本地工作。我忘记在构建和推送时将COPY 我的代码放入容器中,所以这似乎是我问题的根源! :P
  • 很高兴您发现了问题:'D
【解决方案2】:

我们可以在the AWS ECR documentation阅读以下内容:

注意

从 Docker 版本 1.9 开始,Docker 客户端会在将镜像层推送到 V2 Docker 注册表之前对其进行压缩。 docker images 命令的输出显示未压缩的图像大小,因此它可能返回比 AWS 管理控制台中显示的图像大小更大的图像大小。

我怀疑你会得到你期望的大小,你会使用 CLI (docker images) 而不是 ECR Web 控制台。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多