Amazon ECR 故障排除 - Amazon ECR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon ECR 故障排除

本章帮助您查找 Amazon EElastic Container Registry (Amazon ECR) 的诊断信息,并为常见问题和错误消息提供故障排除步骤。

启用 Docker 调试输出

要开始调试任何 Docker 相关问题,都需要首先在您的主机实例上运行的 Docker 守护程序中启用 Docker 调试输出。有关启用 Docker 调试的更多信息,如果您使用 Amazon ECR 在 Amazon ECR 容器实例上提取的图像,请参阅启用 Docker 调试输出中的Amazon Elastic Container Service 开发者指南

启用 Amazon CloudTrail

有关 Amazon ECR 返回的错误的其他信息,可通过启用Amazon CloudTrail,这是一个记录Amazon调用您的Amazonaccount. CloudTrail 将日志文件传送到 Amazon S3 存储桶。通过使用 CloudTrail 收集的信息,您可以确定向Amazon服务,谁提出的请求,当它作出,等等。要了解有关 CloudTrail 的更多信息(包括如何打开 CloudTrail 以及如何查找日志文件),请参阅Amazon CloudTrail用户指南。有关将 CloudTrail 与亚马逊 ECR 结合使用的更多信息,请参阅使用记录亚马逊 ECR 操作Amazon CloudTrail

优化亚马逊 ECR 的性能

以下部分提供了在使用 Amazon ECR 时可用于优化性能的设置和策略建议。

使用 Docker 1.10 及以上版本可利用同时层上传

Docker 映像由层组成,是映像的中间构建阶段。Dockerfile 的每一行都会创建新层。当使用 Docker 1.10 及以上版本时,Docker 在默认情况下会在 Amazon ECR 上推送尽可能多的层,从而缩短上传时间。

使用较小基本映像

通过 Docker Hub 提供的默认映像,可能包含您的应用程序不需要的很多依赖项。请考虑使用其他人在 Docker 社区创建并维护的较小映像,或使用 Docker 最小映像构建您自己的基本映像。有关更多信息,请参阅 Docker 文档中的创建基本映像

更早将更改最少的依赖性放入您的 Dockerfile

Docker 缓存层,可加速构建时间。如果从最后一次构建至今,某一层上没有任何更改,则 Docker 将使用缓存版本,而不重新构建层。但是,每层都依赖之前出现的层。如果层发生更改,则 Docker 不仅重新编译该层,也会重新编译该层之后出现的所有层。

为了尽量缩短重新构建 Dockerfile 并重新上传层所需的时间,可考虑早些时候将更改频率最低的依赖项放入 Dockerfile。将经常更改的依赖项(如应用程序的源代码)稍后放入堆栈。

链接命令以避免不必要文件的存储

在层中创建的中间文件会作为该层的一部分保留,即使该层在后续层中被删除。考虑以下示例:

WORKDIR /tmp RUN wget http://example.com/software.tar.gz RUN wget tar -xvf software.tar.gz RUN mv software/binary /opt/bin/myapp RUN rm software.tar.gz

在本示例中,第一个和第二个 RUN 命令创建的层包含原始 .tar.gz 文件及其所有解压内容。即使第四个 RUN 命令已删除 .tar.gz 文件。这些命令可以链接在一起,构成单独的运行语句,以确保最终 Docker 映像中不包含不必要的文件。

WORKDIR /tmp RUN wget http://example.com/software.tar.gz &&\ wget tar -xvf software.tar.gz &&\ mv software/binary /opt/bin/myapp &&\ rm software.tar.gz
使用最近的区域终端节点

通过确保使用最靠近运行应用程序的区域终端节点,可以减少从 Amazon ECR 拉取镜像的延迟。如果您的应用程序在 Amazon EC2 实例上运行,您可以使用以下 shell 代码从实例的可用区获取区域:

REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone |\ sed -n 's/\(\d*\)[a-zA-Z]*$/\1/p')

可以使用 --region 参数将该区域传递给 Amazon CLI 命令,或使用 aws configure 命令将该区域设为某个配置文件的默认区域。您还可以在通过调用时设置区域Amazon软件开发工具包。有关更多信息,请参阅适用于特定编程语言的软件开发工具包文档。