

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

# 为 Lightsail 容器服务构建和测试 Docker 镜像
<a name="amazon-lightsail-creating-container-images"></a>

通过 Docker，您可以构建、运行、测试和部署基于容器的分布式应用程序。Amazon Lightsail 容器服务使用部署中的 Docker 容器镜像来启动容器。

在本指南中，我们将介绍如何使用 Docker 文件在本地机器上创建容器镜像。创建镜像后，您可以将其推送到 Lightsail 容器服务以进行部署。

要完成本指南中的步骤，您应基本了解 Docker 是什么及其工作方式。有关 Docker 的更多信息，请参阅 [Docker 是什么？](https://aws.amazon.com/docker/)和 [Docker 概述](https://docs.docker.com/get-started/overview/)。

**内容**
+ [步骤 1：完成先决条件](#create-container-image-prerequisite)
+ [步骤 2：创建 Docker 文件并构建容器镜像](#create-container-image-create-dockerfile)
+ [步骤 3：运行新容器镜像](#create-container-image-run-container)
+ [（可选）步骤 4：清除本地机器上运行的容器](#create-container-image-cleanup)
+ [创建容器镜像后的后续步骤](#create-container-image-next-steps)

## 步骤 1：完成先决条件
<a name="create-container-image-prerequisite"></a>

在开始之前，您必须安装创建容器所需的软件，然后将其推送到 Lightsail 容器服务。例如，您必须安装并使用 Docker 来创建和构建容器镜像，然后便可以用于您的 Lightsail 容器服务。有关更多信息，请参阅 。[安装软件以管理 Amazon Lightsail 容器服务的容器镜像](amazon-lightsail-install-software.md)。

## 步骤 2：创建 Docker 文件并构建容器镜像
<a name="create-container-image-create-dockerfile"></a>

完成以下过程以创建 Docker 文件并用其构建 `mystaticwebsite` Docker 容器镜像。容器映像将用于在 Ubuntu 的 Apache Web 服务器上托管的简单静态网站。

1. 在本地机器上创建 `mystaticwebsite` 文件夹，以在其中存储 Docker 文件。

1. 在您刚创建的文件夹中创建 Docker 文件。

   Docker 文件不使用文件扩展名，例如 `.TXT`。完整文件名为 `Dockerfile`。

1. 根据您希望如何配置容器镜像，复制以下代码块之一，并将其粘贴到 Docker 文件中：
   + **如果您想创建一个包含 Hello World 消息的简单静态网站容器镜像**，则复制以下代码块并将其粘贴到 Docker 文件中。此代码示例使用 Ubuntu 18.04 镜像。`RUN` 指令更新程序包缓存，并安装和配置 Apache，然后将 Hello World 消息打印到 Web 服务器的文档根目录。`EXPOSE` 指令在容器上公开端口 80，`CMD` 指令启动 Web 服务器。

     ```
     FROM ubuntu:18.04
     
     # Install dependencies
     RUN apt-get update && \
      apt-get -y install apache2
     
     # Write hello world message
     RUN echo 'Hello World!' > /var/www/html/index.html
     
     # Open port 80
     EXPOSE 80
     
     # Start Apache service
     CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
     ```
   + **如果您想为静态网站容器镜像使用您自己的 HTML 文件集**，请在存储 Docker 文件的相同文件夹中创建 `html` 文件夹。然后把您的 HTML 文件放在该文件夹中。

     在您的 HTML 文件位于 `html` 文件夹中之后，复制以下代码块并将其粘贴到 Docker 文件中。此代码示例使用 Ubuntu 18.04 镜像。`RUN` 指令更新程序包缓存，并安装和配置 Apache。`COPY` 指令将 html 文件夹的内容复制到 Web 服务器的文档根目录。`EXPOSE` 指令在容器上公开端口 80，`CMD` 指令启动 Web 服务器。

     ```
     FROM ubuntu:18.04
     
     # Install dependencies
     RUN apt-get update && \
      apt-get -y install apache2
     
     # Copy html directory files
     COPY html /var/www/html/
     
     # Open port 80
     EXPOSE 80
     
     CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
     ```

1. 打开命令提示符或终端窗口，然后将目录更改为要存储 Docker 文件的文件夹。

1. 输入以下命令以使用文件夹中的 Docker 文件构建容器镜像。此命令将构建一个名为 `mystaticwebsite` 的新 Docker 容器镜像。

   ```
   docker build -t mystaticwebsite .
   ```

   您应该看到一条确认镜像已成功构建的消息。

1. 输入以下命令以查看本地机器上的容器镜像。

   ```
   docker images --filter reference=mystaticwebsite
   ```

   您应看到类似于以下示例的结果，其中显示新创建的容器镜像。  
![\[Docker 镜像命令的结果\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/docker-images-command-result.png)

   您新构建的容器镜像已准备好进行测试，可使用它在本机计算机上运行新容器。继续本指南的下一部分[步骤 3：运行新容器镜像](#create-container-image-run-container)。

## 步骤 3：运行新容器镜像
<a name="create-container-image-run-container"></a>

完成以下步骤以运行您创建的新容器镜像。

1. 在命令提示符或终端窗口中，输入以下命令以运行您之前在本指南的[步骤 2：创建 Docker 文件并构建容器镜像](#create-container-image-create-dockerfile)部分中构建的容器镜像。`-p 8080:80` 选项将容器上公开的端口 80 映射到本地机器上的端口 8080。`-d` 选项指定容器应在分离模式下运行。

   ```
   docker container run -d -p 8080:80 --name mystaticwebsite mystaticwebsite:latest
   ```

1. 输入以下命令以查看正在运行的容器。

   ```
   docker container ls -a
   ```

   您应看到类似于以下示例的结果，其中显示新运行的容器。  
![\[Docker 容器命令的结果\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/docker-container-command-result.png)

1. 要确认容器已启动并正在运行，请打开一个新的浏览器窗口并浏览到 `http://localhost:8080`。您应看到类似于以下示例的消息。这确认您的容器已启动并在本地机器上运行。  
![\[在 Docker 容器上运行的静态网站\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/container-mystaticsite-hello-world.png)

   您新构建的容器镜像已准备好被推送到您的 Lightsail 账户，以便您可以将其部署到 Lightsail 容器服务。有关更多信息，请参阅[在 Amazon Lightsail 服务中推送和管理容器镜像](amazon-lightsail-pushing-container-images.md)。

## （可选）步骤 4：清除本地机器上运行的容器
<a name="create-container-image-cleanup"></a>

既然您已经创建了可以推送到 Lightsail 容器服务的容器镜像，按照本指南中的步骤，现在可以清除本地机器上运行的容器。

完成以下步骤以清除本地计算机上运行的容器：

1. 运行以下命令以查看本地机器上运行的容器。

   ```
   docker container ls -a
   ```

   您应该看到类似下面的结果，其中列出了本地计算机上运行的容器的名称。  
![\[Docker 容器命令的结果\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/docker-container-command-result.png)

1. 运行以下命令可删除之前在本指南中创建的运行中容器。这会强制停止容器，并永久删除容器。

   ```
   docker container rm <ContainerName> --force
   ```

   在命令中，将 < ContainerName > 替换为要停止的容器的名称，然后将其删除。

   示例：

   ```
   docker container rm mystaticwebsite --force
   ```

   现在可以删除据本指南创建的容器。

## 创建容器镜像后的后续步骤
<a name="create-container-image-next-steps"></a>

创建容器镜像后，在准备部署容器镜像时将其推送到 Lightsail 容器服务。有关更多信息，请参阅[管理 Lightsail 容器服务镜像](amazon-lightsail-pushing-container-images.md)。

**Topics**
+ [步骤 1：完成先决条件](#create-container-image-prerequisite)
+ [步骤 2：创建 Docker 文件并构建容器镜像](#create-container-image-create-dockerfile)
+ [步骤 3：运行新容器镜像](#create-container-image-run-container)
+ [（可选）步骤 4：清除本地机器上运行的容器](#create-container-image-cleanup)
+ [创建容器镜像后的后续步骤](#create-container-image-next-steps)
+ [管理容器映像](amazon-lightsail-pushing-container-images.md)
+ [安装容器服务插件](amazon-lightsail-install-software.md)
+ [ECR 私有存储库访问权限](amazon-lightsail-container-service-ecr-private-repo-access.md)

# 推送、查看和删除 Lightsail 容器服务的容器镜像
<a name="amazon-lightsail-pushing-container-images"></a>

在 Amazon Lightsail 容器服务中创建部署时，必须为每个容器条目指定源容器镜像。您可以使用 Amazon ECR Public Gallery 等公有注册表中的映像，也可以使用您在本地计算机上创建的映像。在本指南中，我们将介绍如何将容器镜像从本地机器推送到 Lightsail 容器服务。有关创建容器映像的更多信息，请参阅[创建容器服务映像](amazon-lightsail-creating-container-images.md)。

**内容**
+ [先决条件](#push-container-images-prerequisites)
+ [将容器镜像从本地机器推送到容器服务](#push-container-images)
+ [查看存储在容器服务中的容器镜像](#view-pushed-container-images)
+ [查看存储在容器服务中的容器镜像](#delete-stored-container-images)

## 先决条件
<a name="push-container-images-prerequisites"></a>

在开始将容器镜像推送到容器服务之前，请完成以下先决条件：
+ 在您的 Lightsail 账户中创建容器服务。有关更多信息，请参阅[创建 Amazon Lightsail 容器服务](amazon-lightsail-creating-container-services.md)。
+ 在本地机器上安装软件，您需要创建自己的容器镜像，并将其推送到 Lightsail 容器服务。有关更多信息，请参阅[安装软件以管理 Amazon Lightsail 容器服务的容器镜像](amazon-lightsail-install-software.md)。
+ 在本地机器上创建镜像，您可以将其推送到 Lightsail 容器服务。有关更多信息，请参阅[创建 Amazon Lightsail 容器服务的容器镜像](amazon-lightsail-creating-container-images.md)。

## 将容器镜像从本地机器推送到容器服务
<a name="push-container-images"></a>

完成以下过程，将容器镜像推送到容器服务。

1. 打开命令提示符或终端窗口。

1. 在命令提示符或终端窗口中，输入以下命令以查看当前位于本地机器上的 Docker 镜像。

   ```
   docker images
   ```

1. 在结果中，找到要推送到容器服务的容器镜像的名称（存储库名称）和标签。请记下这些信息，因为需要在下一步中用到。  
![\[本地机器上的 Docker 容器镜像\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/amazon-lightsail-container-service-docker-images.png)

1. 输入以下命令以将本地机器上的容器镜像推送到容器服务。

   ```
   aws lightsail push-container-image --region <Region> --service-name <ContainerServiceName> --label <ContainerImageLabel> --image <LocalContainerImageName>:<ImageTag>
   ```

   在该命令中，将：
   + *<Region>*使用创建容器服务的 AWS 区域。
   + *<ContainerServiceName>*使用您的容器服务的名称。
   + *<ContainerImageLabel>*带有您要在容器镜像存储在容器服务上时为其提供的标签。指定描述性标签，可用于跟踪不同版本的注册容器镜像。

     标签将成为容器服务生成的容器镜像名称的一部分。例如，如果容器服务名称为 `container-service-1`，容器镜像标签为 `mystaticsite`，且这是您要推送的容器镜像的第一个版本，那么容器服务生成的图像名称将是 `:container-service-1.mystaticsite.1`。
   + *<LocalContainerImageName>*使用您要推送到容器服务的容器镜像的名称。您在此过程的上一步中获取了容器镜像名称。
   + *<ImageTag>*带有您要推送到容器服务的容器镜像的标签。您在此过程的上一步中获取了容器镜像标签。

   例如：

   ```
   aws lightsail push-container-image --region us-west-2 --service-name myservice --label mystaticwebsite --image mystaticwebsite:v2
   ```

   您应该看到类似于以下示例的结果，其中确认您的容器镜像已推送到容器服务。  
![\[推送到 Lightsail 容器服务的 Docker 容器镜像\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/amazon-lightsail-container-service-pushed-image.png)

   请参阅本指南的以下部分[查看存储在容器服务中的容器镜像](#view-pushed-container-images)，在 Lightsail 控制台上查看容器服务中已推送的容器镜像。

## 查看存储在容器服务中的容器镜像
<a name="view-pushed-container-images"></a>

请完成以下过程，查看容器服务中已推送和已存储的容器镜像。

1. 登录 [Lightsail 控制台](https://lightsail.aws.amazon.com/)。

1. 在左侧导航窗格中，选择**容器**。

1. 选择要查看其存储容器镜像的容器服务的名称。

1. 在容器服务管理页面中，选择**镜像**选项卡。
**注意**  
如果尚未将镜像推送到容器服务，则不会显示**镜像**选项卡。要显示容器服务的镜像选项卡，必须首先将容器镜像推送到服务。

   **镜像**页面列出了已推送到容器服务且当前存储在服务中的容器镜像。无法删除当前部署中正在使用的容器镜像，其使用灰色删除图标列出。  
![\[Lightsail 控制台中存储的图像页面\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/amazon-lightsail-container-services-stored-images-page.png)

   您可以使用存储在服务中的容器镜像创建部署。有关更多信息，请参阅“创建和管理 Amazon Lightsail 容器服务的部署”。

## 查看存储在容器服务中的容器镜像
<a name="delete-stored-container-images"></a>

请完成以下过程，删除容器服务中已推送和已存储的容器镜像。

1. 登录 [Lightsail 控制台](https://lightsail.aws.amazon.com/)。

1. 在左侧导航窗格中，选择**容器**。

1. 选择要查看其当前部署的容器服务的名称。

1. 在容器服务管理页面中，选择**镜像**选项卡。
**注意**  
如果尚未将镜像推送到容器服务，则不会显示**镜像**选项卡。要显示容器服务的镜像选项卡，必须首先将容器镜像推送到服务。

1. 找到要删除的容器镜像，然后选择 删除图标（垃圾桶图标）。
**注意**  
无法删除当前部署中正在使用的容器镜像，其删除图标为灰色。

1. 在出现的确认提示中，选择**是，请删除**以确认您要永久删除存储的镜像。

   您存储的容器镜像将立即从容器服务中删除。

# 安装 Docker 和容器的 Lightsail Control 插件 AWS CLI
<a name="amazon-lightsail-install-software"></a>

您可以使用 Amazon Lightsail 控制台创建 Lightsail 容器服务，并使用来自在线公共注册表（例如 Amazon ECR 公共图库）的容器映像创建部署。要创建自己的容器镜像并将其推送到您的容器服务，则必须在您计划创建容器镜像的同一台计算机上安装以下附加软件：
+ **Docker** — 运行、测试和创建自己的容器镜像，然后您可以将其与 Lightsail 容器服务一起使用。
+ **AWS Command Line Interface (AWS CLI)** — 指定您创建的容器镜像的参数，然后将其推送到您的 Lightsail 容器服务。2.1.1 及更高版本将与 Lightsail Control 插件配合使用。
+ **Lightsail Control (lightsailctl) 插件** — AWS CLI 允许访问本地计算机上的容器镜像。

本指南的以下章节介绍了可从何处下载这些软件包以及如何进行安装。有关容器服务的更多信息，请参阅[容器服务](amazon-lightsail-container-services.md)。

**内容**
+ [安装 Docker](#install-software-docker)
+ [安装 AWS CLI](#install-software-aws-cli)
+ [安装 Lightsail 控制插件](#install-software-lightsailctl)
  + [在 Windows 上安装 lightsailctl 插件](#install-lightsailctl-on-windows)
  + [在 macOS 上安装 lightsailctl 插件](#install-lightsailctl-on-macos)
  + [在 Linux 上安装 lightsailctl 插件](#install-lightsailctl-on-linux)

## 安装 Docker
<a name="install-software-docker"></a>

Docker 技术可以构建、运行、测试和部署基于 Linux 容器的分布式应用程序。如果您想创建自己的容器镜像，然后将其与 Lightsail 容器服务一起使用，则必须安装和使用 Docker 软件。有关更多信息，请参阅[为您的 Lightsail 容器服务创建容器镜像](amazon-lightsail-creating-container-images.md)。

Docker 适用于许多不同的操作系统，包括大多数现代 Linux 分发版 (如 Ubuntu) 甚至 MacOS 和 Windows。有关如何在特定的操作系统上安装 Docker 的更多信息，请参阅 [Docker 安装指南](https://docs.docker.com/engine/installation/#installation)。

**注意**  
务必安装最新版本的 Docker。不保证旧版本的 Docker 可以与本指南后面介绍的 Lightsail C AWS CLI ontrol (lightsailctl) 插件配合使用。

## 安装 AWS CLI
<a name="install-software-aws-cli"></a>

 AWS CLI 是一款开源工具，可让您使用命令行外壳中的命令与 Lightsail 等 AWS 服务进行交互。您必须安装并使用将您在本地计算机上创建的容器映像推送 AWS CLI 到您的 Lightsail 容器服务。

 AWS CLI 有以下版本可用：
+ **版本 2.x** – 目前最新的 AWS CLI版本。这是的最新主要版本，支持所有最新功能 AWS CLI ，包括能够将容器映像推送到 Lightsail 容器服务。2.1.1 及更高版本将与 Lightsail Control 插件配合使用。
+ **版本 1.x** — 以前版本可用于向后兼容。 AWS CLI 此版本不支持将您的容器镜像推送到 Lightsail 容器服务。因此，您必须改为安装 AWS CLI 版本 2。

 AWS CLI 版本 2 可用于 Linux、macOS 和 Windows 操作系统。有关如何在这些操作系统 AWS CLI 上安装的说明，请参阅[《*AWS CLI 用户指南》*中的安装 AWS CLI 版本 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。

## 安装 Lightsail 控制插件
<a name="install-software-lightsailctl"></a>

Lightsail Control (lightsailctl) 插件是一款轻量级应用程序， AWS CLI 允许访问您在本地计算机上创建的容器镜像。它允许您将容器映像推送到 Lightsail 容器服务，以便可以将它们部署到您的服务中。

**系统要求**
+ 支持 64 位的 Windows、macOS 或 Linux 操作系统。
+ AWS CLI 要使用 lightsailctl 插件，必须将版本 2 安装在本地计算机上。有关更多信息，请参阅本指南前面介绍的[安装 AWS CLI](#install-software-aws-cli)一节。

**使用最新版本的 lightsailctl 插件**

此插件会不时更新，已提供增强功能。每次使用 lightsailctl 插件时，它都会检查确认您使用的是最新版本。如果发现可用的新版本，则会提示您更新到最新版本以利用最新功能。发布更新版本时，您必须重复安装过程以获取最新版本的 lightsailctl 插件。

下表列出了 lightsailctl 插件的所有版本，以及每个版本所含的功能和增强功能。
+ **v1.0.0（2020 年 11 月 12 日发布）**— 初始版本为 AWS CLI 版本 2 增加了将容器映像推送到 Lightsail 容器服务的功能。

### 在 Windows 上安装 lightsailctl 插件
<a name="install-lightsailctl-on-windows"></a>

请完成以下过程以在 Windows 上安装 lightsailctl 插件。

1. 通过以下 URL 下载可执行文件，并将其保存到 `C:\Temp\lightsailctl\` 目录中。

   ```
   https://s3.us-west-2.amazonaws.com/lightsailctl/latest/windows-amd64/lightsailctl.exe
   ```

1. 选择 **Windows 开始**按钮，然后搜索 `cmd`。

1. 在搜索结果中，右键单击 **Command Prompt (命令提示符)** 应用程序并选择 **Run as administrator (以管理员身份运行)**。  
![\[以管理员身份运行命令提示符\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/lightsailctl-cmd-run-as-administrator.png)
**注意**  
您可能会看到一个提示，询问你是否要允许命令提示符对你的设备进行更改。您必须选择** Yes（是）**以继续安装。

1. 输入以下命令以设置路径环境变量，该变量指向您保存 lightsailctl 插件的 `C:\Temp\lightsailctl\` 目录。

   ```
   setx PATH "%PATH%;C:\Temp\lightsailctl" /M
   ```

   您应看到类似于以下示例的结果。  
![\[命令行将响应 setx 命令\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/lighstailctl-setx-command.png)

`setx` 命令将在超过 1024 个字符截断文本。如果您已经在 PATH 中设置了多个变量，请使用以下步骤手动设置路径环境变量。

1. 在 **Start**（开始）菜单上，打开 **Control Panel**（控制面板）。

1. 选择 **System and Security**（系统与安全），然后选择 **System**（系统）。

1. 选择**高级系统设置**。

1. 在 **System Properties**（系统属性）对话框的 **Advanced**（高级）选项卡中，选择 **Environment Variables**（环境变量）。

1. 在 **Environment Variables**（环境变量）对话框的 **System Variables**（系统变量）框中，选择 **Path**（路径）。

1. 选择 **System Variables**（系统变量）对话框下的 **Edit**（编辑）按钮。  
![\[Windows 系统变量\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/lightsail-windows-system-variables.png)

1. 选择 **New**（新建），然后输入以下路径：`C:\Temp\lightsailctl\`  
![\[Windows 环境变量\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/lightsail-windows-edit-env-variable.png)

1. 在接下来的三个对话框中选择 **OK**（确定），然后关闭 **System**（系统）对话框。

现在，您可以使用 AWS Command Line Interface (AWS CLI) 将容器镜像推送到您的 Lightsail 容器服务了。有关更多信息，请参阅[推送和管理容器映像](amazon-lightsail-pushing-container-images.md)。

### 在 macOS 上安装 lightsailctl 插件
<a name="install-lightsailctl-on-macos"></a>

请完成以下其中一个过程，在 Windows 上下载并安装 lightsailctl 插件。

**Homebrew 下载和安装**

1. 打开终端窗口。

1. 输入以下命令以下载并安装 lightsailctl 插件。

   ```
   brew install aws/tap/lightsailctl
   ```
**注意**  
有关 Homebrew 的更多信息，请参阅 [Homebrew](https://brew.sh/) 网站。

**手动下载和安装**

1. 打开终端窗口。

1. 输入以下命令以下载 lightsailctl 插件并将其复制到 bin 文件夹。

   ```
   curl "https://s3.us-west-2.amazonaws.com/lightsailctl/latest/darwin-amd64/lightsailctl" -o "/usr/local/bin/lightsailctl"
   ```

1. 输入以下命令以构建可执行的插件。

   ```
   chmod +x /usr/local/bin/lightsailctl
   ```

1. 输入以下命令以清除插件的扩展属性。

   ```
   xattr -c /usr/local/bin/lightsailctl
   ```

现在，您可以使用将容器镜像推送 AWS CLI 到您的 Lightsail 容器服务了。有关更多信息，请参阅[推送和管理容器映像](amazon-lightsail-pushing-container-images.md)。

### 在 Linux 上安装 lightsailctl 插件
<a name="install-lightsailctl-on-linux"></a>

完成以下过程，在 Linux 上安装 Lightsail 容器服务插件。

1. 打开终端窗口。

1. 输入以下命令以下载 lightsailctl 插件。
   + 对于 AMD 64 位架构版本的插件：

     ```
     curl "https://s3.us-west-2.amazonaws.com/lightsailctl/latest/linux-amd64/lightsailctl" -o "/usr/local/bin/lightsailctl"
     ```
   + 对于 ARM 64 位架构版本的插件：

     ```
     curl "https://s3.us-west-2.amazonaws.com/lightsailctl/latest/linux-arm64/lightsailctl" -o "/usr/local/bin/lightsailctl"
     ```

1. 输入以下命令以构建可执行的插件。

   ```
   sudo chmod +x /usr/local/bin/lightsailctl
   ```

   现在，您可以使用将容器镜像推送 AWS CLI 到您的 Lightsail 容器服务了。有关更多信息，请参阅[推送和管理容器映像](amazon-lightsail-pushing-container-images.md)。

# 授予 Lightsail 容器服务访问亚马逊 ECR 私有存储库的权限
<a name="amazon-lightsail-container-service-ecr-private-repo-access"></a>

Amazon Elastic Container Registry (Amazon ECR) AWS 是一项托管容器镜像注册服务，它使用 (IAM) 支持具有基于资源的权限 AWS Identity and Access Management 的私有存储库。您可以授予您的 Amazon Lightsail 容器服务访问您的 Amazon ECR 私有存储库的权限。 AWS 区域然后，您可以将映像从私有存储库部署到容器服务。

您可以使用 Lightsail 控制台或 () 来管理 Lightsail 容器服务和 Amazon ECR 私有存储库的访问权限。 AWS Command Line Interface AWS CLI但是，我们建议您使用 Lightsail 控制台，因为它可以简化流程。

有关容器服务的更多信息，请参阅[容器服务](amazon-lightsail-container-services.md)。有关 Amazon ECR 的更多信息，请参阅 [Amazon ECR 用户指南](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)。

**内容**
+ [所需权限](#ecr-private-repos-permissions)
+ [使用 Lightsail 控制台管理对私有仓库的访问权限](#ecr-private-repo-access-lightsail-console)
+ [使用来管理 AWS CLI 对私有仓库的访问权限](#ecr-private-repo-access-cli)
  + [激活或停用 Amazon ECR 映像拉取器 IAM 角色](#activate-ecr-puller-role)
  + [确定您的 Amazon ECR 私有存储库是否有策略语句](#identify-ecr-repo-policy-statement)
    + [将策略添加到没有策略语句的私有存储库](#ecr-private-repo-add-policy-no-policy)
    + [将策略添加到有策略语句的私有存储库](#ecr-private-repo-add-policy-existing-policy)

## 所需的权限
<a name="ecr-private-repos-permissions"></a>

负责管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限的用户必须在 IAM 中拥有以下权限策略之一。有关更多信息，请参阅《AWS Identity and Access Management 用户指南**》中的[添加和删除 IAM 标识权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

**授予对任何 Amazon ECR 私有存储库的访问权限**

以下权限策略向用户授予配置对任何 Amazon ECR 私有存储库的访问的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageEcrPrivateRepositoriesAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:SetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:DeleteRepositoryPolicy",
                "ecr:GetRepositoryPolicy"
            ],
            "Resource": "arn:aws:ecr:*:111122223333:repository/*"
        }
    ]
}
```

------

在政策中，*AwsAccountId*替换为您的 AWS 账号。

**授予对特定 Amazon ECR 私有存储库的访问权限**

以下权限策略向用户授予在特定 AWS 区域中配置对特定 Amazon ECR 私有存储库的访问的权限。

在该策略中，将以下示例文本替换为自己的文本：
+ *AwsRegion*— 私有存储库的 AWS 区域 代码（例如`us-east-1`）。您的 Lightsail 容器服务必须与您要访问 AWS 区域 的私有存储库位于同一个存储库中。
+ *AwsAccountId*— 您的 AWS 账号。
+ *RepositoryName*— 您要管理其访问权限的私有存储库的名称。

以下是使用示例值填充的权限策略的示例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageEcrPrivateRepositoriesAccess",
            "Effect": "Allow",
            "Action": [
                "ecr:SetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:DeleteRepositoryPolicy",
                "ecr:GetRepositoryPolicy"
            ],
            "Resource": "arn:aws:ecr:us-east-1:111122223333:repository/my-private-repo"
        }
    ]
}
```

------

## 使用 Lightsail 控制台管理对私有仓库的访问权限
<a name="ecr-private-repo-access-lightsail-console"></a>

完成以下过程，使用 Lightsail 控制台管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限。

1. 登录 [Lightsail 控制台](https://lightsail.aws.amazon.com/)。

1. 在左侧导航窗格中，选择**容器**。

1. 选择您想要为其配置对 Amazon ECR 私有存储库的访问权限的容器服务的名称。  
![\[Lightsail 控制台中的容器服务\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/container-service-card.png)

1. 选择**映像**选项卡。  
![\[Lightsail 控制台容器服务管理页面中的 “图像” 选项卡\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/container-service-images-tab.png)

1. 选择**添加存储库**以授予您的容器服务访问 Amazon ECR 私有存储库的权限。
**注意**  
您可以选择**删除**以从先前添加的 Amazon ECR 私有存储库中删除容器服务的访问权限。  
![\[“映像”选项卡的 Amazon ECR 私有存储库部分\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/container-service-ecr-repos-section.png)

1. 在出现的下拉菜单中，选择要访问的私有存储库，然后选择 **Add**（添加）。  
![\[Amazon ECR 私有存储库下拉选项\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/container-service-ecr-repos-selection.png)

   Lightsail 花点时间为您的容器服务激活 Amazon ECR 图像提取器 IAM 角色，其中包括主要的亚马逊资源名称 (ARN)。然后，Lightsail 会自动将 IAM 角色委托人 ARN 添加到您选择的 Amazon ECR 私有存储库的权限策略中。这将授予容器服务对私有存储库及其映像的访问权限。在出现的模式表明该过程已完成之前，不要关闭浏览器窗口，您可以选择 **Continue**（继续）。  
![\[确认权限正在添加到 Amazon ECR 私有存储库的模式\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/container-service-ecr-repos-confirmation-modal.png)

1. 在激活完成时选择 **Continue**（继续）。

   添加选择的 Amazon ECR 私有存储库后，它将列在页面的 **Amazon ECR 私有存储库**部分。该页面包含有关如何将镜像从私有存储库部署到 Lightsail 容器服务的说明。要使用私有存储库中的映像，请在创建容器服务部署时将页面上显示的 URI 格式指定为 **Image**（映像）值。在您指定的 URI 中，将示例*\$1image tag\$1*替换为要部署的映像的标签。有关更多信息，请参阅[创建和管理容器服务的部署](amazon-lightsail-container-services-deployments.md)。  
![\[添加 Amazon ECR 私有存储库之后的后续步骤\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/container-service-ecr-repos-next-steps.png)

## 使用来管理 AWS CLI 对私有仓库的访问权限
<a name="ecr-private-repo-access-cli"></a>

使用 AWS Command Line Interface (AWS CLI) 管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限需要执行以下步骤：

**重要**  
我们建议您使用 Lightsail 控制台来管理 Lightsail 容器服务对 Amazon ECR 私有存储库的访问权限，因为它可以简化流程。有关更多信息，请参阅本指南前[面的 “使用 Lightsail 控制台管理私有仓库的访问权限](#ecr-private-repo-access-lightsail-console)”。

1. **激活或停用 Amazon ECR 图像提取器 IAM 角色** — 使用 Lightsail AWS CLI `update-container-service` 的命令激活或停用 Amazon ECR 图像提取器 IAM 角色。当您激活 Amazon ECR 映像拉取器 IAM 角色时，会为该角色创建一个主体 Amazon 资源名称（ARN）。有关更多信息，请参阅本指南的[激活或停用 Amazon ECR 映像拉取器 IAM 角色](#activate-ecr-puller-role)一节。

1. **确定您的 Amazon ECR 私有存储库是否有策略语句**：激活 Amazon ECR 映像拉取器 IAM 角色之后，您需要确定您想要使用容器服务访问的 Amazon ECR 私有存储库是否具有现有的策略语句。有关更多信息，请参阅本指南后面部分中的[确定您的 Amazon ECR 私有存储库是否有策略语句](#identify-ecr-repo-policy-statement)。

   您可以使用以下方法之一将 IAM 角色主体 ARN 添加到存储库中，具体取决于存储库是否具有现有策略语句：

   1. **向没有政策声明的私有存储库添加**策略 — 使用 Amazon ECR AWS CLI `set-repository-policy` 命令将您的容器服务的 Amazon ECR 图像提取器角色委托人 ARN 添加到具有现有策略的私有存储库中。有关更多信息，请参阅本指南后面部分中的[将策略添加到没有策略语句的私有存储库](#ecr-private-repo-add-policy-no-policy)。

   1. **向包含策略声明的私有存储库添加策略** — 使用 Amazon ECR AWS CLI `set-repository-policy` 命令将容器服务的 Amazon ECR 图像提取器角色添加到没有现有策略的私有存储库中。有关更多信息，请参阅本指南后面部分中的[将策略添加到有策略语句的私有存储库](#ecr-private-repo-add-policy-existing-policy)。

### 激活或停用 Amazon ECR 映像拉取器 IAM 角色
<a name="activate-ecr-puller-role"></a>

完成以下步骤以激活或停用 Lightsail 容器服务的 Amazon ECR 图像提取器 IAM 角色。你可以使用 Lightsail 的命令激活或停用 Amazon ECR 图像提取器 IAM 角色 AWS CLI `update-container-service`。有关更多信息，请参阅《AWS CLI 命令参考》**中的 [update-container-service](https://docs.aws.amazon.com/cli/latest/reference/lightsail/update-container-service.html)。

**注意**  
必须先为 Lightsail 安装 AWS CLI 并对其进行配置，然后才能继续执行此过程。有关更多信息，请参阅[配置为与 Lightsail 配合使用](lightsail-how-to-set-up-and-configure-aws-cli.md)。 AWS CLI 

1. 打开命令提示符或终端窗口。

1. 输入以下命令以更新容器服务并激活或停用 Amazon ECR 映像拉取器 IAM 角色。

   ```
   aws lightsail update-container-service --service-name ContainerServiceName --private-registry-access ecrImagePullerRole={isActive=RoleActivationState} --region AwsRegionCode
   ```

   在该命令中，将以下示例文本替换为自己的文本：
   + *ContainerServiceName*— 要为其激活或停用 Amazon ECR 图像提取器 IAM 角色的容器服务的名称。
   + *RoleActivationState*— Amazon ECR 图像提取器 IAM 角色的激活状态。指定 `true` 以激活角色，或指定 `false` 停用角色。
   + *AwsRegionCode*— 容器服务的 AWS 区域 代码（例如，`us-east-1`）。

   示例：
   + 激活 Amazon ECR 映像拉取器 IAM 角色：

     ```
     aws lightsail update-container-service --service-name my-container-service --private-registry-access ecrImagePullerRole={isActive=true} --region us-east-1
     ```
   + 停用 Amazon ECR 映像拉取器 IAM 角色：

     ```
     aws lightsail update-container-service --service-name my-container-service --private-registry-access ecrImagePullerRole={isActive=false} --region us-east-1
     ```

1. 如果您：
   + **已激活 Amazon ECR 映像拉取器角色**：在收到之前的回复后至少等待 30 秒钟。然后，继续下一步以获取您的容器服务的 Amazon ECR 映像拉取器 IAM 角色的主体 ARN。
   + **已停用 Amazon ECR 映像拉取器角色**：如果您之前已将 Amazon ECR 映像拉取器 IAM 角色主体 ARN 添加到您的 Amazon ECR 私有存储库的权限策略，则您应该从存储库中删除该权限策略。有关更多信息，请参阅《Amazon ECR 用户指南**》中的[删除私有存储库策略语句](https://docs.aws.amazon.com/AmazonECR/latest/userguide/delete-repository-policy.html)。

1. 输入以下命令以获取您的容器服务的 Amazon ECR 映像拉取器 IAM 角色的主体 ARN。

   ```
   aws lightsail get-container-services --service-name ContainerServiceName --region AwsRegionCode
   ```

   在该命令中，将以下示例文本替换为自己的文本：
   + *ContainerServiceName*— 要为其获取 Amazon ECR 图像提取器 IAM 角色主体 ARN 的容器服务的名称。
   + *AwsRegionCode*— 容器服务的 AWS 区域 代码（例如，`us-east-1`）。

   示例：

   ```
   aws lightsail get-container-services --service-name my-container-service --region us-east-1
   ```

   在响应中寻找 ECR 映像拉取器 IAM 角色主体 ARN。如果列出了角色，请将其复制或记下来。在本指南的下一部分，您将需要它。接下来，您需要确定您想要使用容器服务访问的 Amazon ECR 私有存储库上是否有现有的策略语句。继续浏览本指南的[确定 Amazon ECR 私有存储库是否具有策略语句](#identify-ecr-repo-policy-statement)一节。

### 确定您的 Amazon ECR 私有存储库是否有策略语句
<a name="identify-ecr-repo-policy-statement"></a>

使用以下程序确定您的 Amazon ECR 私有存储库是否有策略语句。您可以将 AWS CLI `get-repository-policy`命令用于 Amazon ECR。有关更多信息，请参阅《AWS CLI 命令参考》**中的 [update-container-service](https://docs.aws.amazon.com/cli/latest/reference/ecr/get-repository-policy.html)。

**注意**  
必须先为 Amazon ECR 安装 AWS CLI 并对其进行配置，然后才能继续执行此过程。有关更多信息，请参阅《Amazon ECR 用户指南**》中的[对 Amazon ECR 进行设置](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html)。

1. 打开命令提示符或终端窗口。

1. 输入以下命令以获取特定私有存储库的策略语句。

   ```
   aws ecr get-repository-policy --repository-name RepositoryName --region AwsRegionCode
   ```

   在该命令中，将以下示例文本替换为自己的文本：
   + *RepositoryName*— 您要为其配置 Lightsail 容器服务访问权限的私有仓库的名称。
   + *AwsRegionCode*— 私有存储库的 AWS 区域 代码（例如，`us-east-1`）。

   示例：

   ```
   aws ecr get-repository-policy --repository-name my-private-repo --region us-east-1
   ```

   您应看到以下响应之一：
   + **RepositoryPolicyNotFoundException**— 您的私有仓库没有政策声明。如果您的存储库没有策略语句，请按照本指南稍后部分中的[将策略添加到没有策略语句的私有存储库](#ecr-private-repo-add-policy-no-policy)一节中的步骤。  
![\[对没有政策声明的私有仓库的 get-repository-policy命令的响应\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/ecr-no-policy-statement.png)
   + **存储库策略已找到** - 您的私有存储库具有策略语句，它在您的请求的响应中显示。如果存储库有策略语句，请复制现有策略，然后按照本指南稍后部分中的[将策略添加到有策略语句的私有存储库](#ecr-private-repo-add-policy-existing-policy)一节中的步骤。  
![\[对包含政策声明的私有仓库的 get-repository-policy命令的响应\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/ecr-existing-policy-statement.png)

### 将策略添加到没有策略语句的私有存储库
<a name="ecr-private-repo-add-policy-no-policy"></a>

完成以下过程以将策略添加到没有策略语句的 Amazon ECR 私有存储库。您添加的策略必须包含您的 Lightsail 容器服务的 Amazon ECR 图片提取器 IAM 角色主体 ARN。这将授予容器服务访问权限，以部署私有存储库中的映像。

**重要**  
当你使用 Lightsail 控制台配置访问权限时，Lightsail 会自动将 Amazon ECR 图像提取器角色添加到你的亚马逊 ECR 私有存储库中。在这种情况下，您不必使用本部分中的程序将 Amazon ECR 映像拉取器角色手动添加到您的私有存储库中。有关更多信息，请参阅本指南前[面的 “使用 Lightsail 控制台管理私有仓库的访问权限](#ecr-private-repo-access-lightsail-console)”。

您可以使用 AWS CLI向私有存储库添加策略。为此，您可以创建包含策略的 JSON 文件，然后使用 Amazon ECR 的 `set-repository-policy` 命令引用该文件。有关更多信息，请参阅《AWS CLI 命令参考》**中的 [set-repository-policy](https://docs.aws.amazon.com/cli/latest/reference/ecr/set-repository-policy.html)。

**注意**  
在继续执行此过程之前，您必须为 Amazon ECR 安装 AWS CLI 并对其进行配置。有关更多信息，请参阅《Amazon ECR 用户指南**》中的[对 Amazon ECR 进行设置](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html)。

1. 打开文本编辑器，然后将以下策略语句粘贴到新的文本文件中。

------
#### [ JSON ]

****  

   ```
   { 
     "Version":"2012-10-17",		 	 	 
     "Statement": [
     {
         "Sid": "AllowLightsailPull-ecr-private-repo-demo",
         "Effect": "Allow",
         "Principal": {
           "AWS": "IamRolePrincipalArn"
         },
         "Action": [
           "ecr:BatchGetImage",
           "ecr:GetDownloadUrlForLayer"
         ]
       }
     ]
   }
   ```

------

   在文本中，*IamRolePrincipalArn*用本指南前面部分的容器服务的 Amazon ECR 图像提取器 IAM 角色主体 ARN 替换。

1. 在计算机上的可访问位置将文件另存为 `ecr-policy.json`（例如，Windows 上的 `C:\Temp\ecr-policy.json` 或 macOS 或 Linux 上的 `/tmp/ecr-policy.json`）。

1. 记下所创建的 `ecr-policy.json` 文件的文件路径位置。您将在此过程后面部分的命令中指定它。

1. 打开命令提示符或终端窗口。

1. 输入以下命令，为要使用容器服务访问的私有存储库设置策略语句。

   ```
   aws ecr set-repository-policy --repository-name RepositoryName --policy-text file://path/to/ecr-policy.json --region AwsRegionCode
   ```

   在该命令中，将以下示例文本替换为自己的文本：
   + *RepositoryName*— 要为其添加策略的私有存储库的名称。
   + *path/to/*— 在本指南前面部分创建的计算机上`ecr-policy.json`文件的路径。
   + *AwsRegionCode*— 私有存储库的 AWS 区域 代码（例如，`us-east-1`）。

   示例：
   + 在 Windows 上：

     ```
     aws ecr set-repository-policy --repository-name my-private-repo --policy-text file://C:\Temp\ecr-policy.json --region us-east-1
     ```
   + 在 macOS 或 Linux 上：

     ```
     aws ecr set-repository-policy --repository-name my-private-repo --policy-text file:///tmp/ecr-policy.json --region us-east-1
     ```

   您的容器服务现在能够访问您的私有存储库及其映像。要使用存储库中的映像，请将以下 URI 指定为您的容器服务部署的 **Image**（映像）值。在 URI 中，将示例*tag*替换为要部署的映像的标签。有关更多信息，请参阅[创建和管理容器服务的部署](amazon-lightsail-container-services-deployments.md)。

   ```
   AwsAccountId.dkr.ecr.AwsRegionCode.amazonaws.com/RepositoryName:ImageTag
   ```

   在 URI 中，将以下示例文本替换为自己的文本：
   + *AwsAccountId*— 您的 AWS 账号。
   + *AwsRegionCode*— 私有存储库的 AWS 区域 代码（例如，`us-east-1`）。
   + *RepositoryName*— 用于部署容器映像的私有存储库的名称。
   + *ImageTag*— 私有存储库中要部署在容器服务上的容器镜像的标签。

   示例：

   ```
   111122223333.dkr.ecr.us-east-1.amazonaws.com/my-private-repo:myappimage
   ```

### 将策略添加到有策略语句的私有存储库
<a name="ecr-private-repo-add-policy-existing-policy"></a>

完成以下过程以将策略添加到有策略语句的 Amazon ECR 私有存储库。您添加的策略必须包括现有策略和包含您的 Lightsail 容器服务的 Amazon ECR 图像提取器 IAM 角色主体 ARN 的新策略。这将维护私有存储库上的现有权限，同时授予容器服务从私有存储库部署映像的访问权限。

**重要**  
当你使用 Lightsail 控制台配置访问权限时，Lightsail 会自动将 Amazon ECR 图像提取器角色添加到你的亚马逊 ECR 私有存储库中。在这种情况下，您不必使用本部分中的程序将 Amazon ECR 映像拉取器角色手动添加到您的私有存储库中。有关更多信息，请参阅本指南前[面的 “使用 Lightsail 控制台管理私有仓库的访问权限](#ecr-private-repo-access-lightsail-console)”。

您可以使用 AWS CLI向私有存储库添加策略。您可以通过创建包含现有策略和新策略的 JSON 文件来完成此操作。然后，使用 Amazon ECR 的 `set-repository-policy` 命令引用该文件。有关更多信息，请参阅《AWS CLI 命令参考》**中的 [set-repository-policy](https://docs.aws.amazon.com/cli/latest/reference/ecr/set-repository-policy.html)。

**注意**  
必须先为 Amazon ECR 安装 AWS CLI 并对其进行配置，然后才能继续执行此过程。有关更多信息，请参阅《Amazon ECR 用户指南**》中的[对 Amazon ECR 进行设置](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html)。

1. 打开命令提示符或终端窗口。

1. 输入以下命令以获取特定私有存储库的策略语句。

   ```
   aws ecr get-repository-policy --repository-name RepositoryName --region AwsRegionCode
   ```

   在该命令中，将以下示例文本替换为自己的文本：
   + *RepositoryName*— 您要为其配置 Lightsail 容器服务访问权限的私有仓库的名称。
   + *AwsRegionCode*— 私有存储库的 AWS 区域 代码（例如，`us-east-1`）。

   示例：

   ```
   aws ecr get-repository-policy --repository-name my-private-repo --region us-east-1
   ```

1. 在响应中，复制现有策略并继续下一个步骤。

   您应该仅复制显示在双引号之间的 `policyText` 的内容，见下面示例中突出显示的内容。  
![\[对没有政策声明的私有仓库的 get-repository-policy命令的响应\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/ecr-existing-policy-copy-statement.png)

1. 打开文本编辑器，将在上一步中复制的私有存储库的现有策略粘贴在其中。

   结果应该类似以下示例。  
![\[示例策略语句 JSON 文件\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/ecr-existing-policy-statement-json.png)

1. 在粘贴的文本中，将 `\n` 替换为换行符并删除剩余的 `\`。

   结果应该类似以下示例。  
![\[编辑策略语句 JSON 文件示例\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/ecr-existing-policy-statement-json-edited.png)

1. 将以下策略语句粘贴在文本文件末尾。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowLightsailPull-ecr-private-repo-demo",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "IamRolePrincipalArn"
               },
               "Action": [
                   "ecr:BatchGetImage",
                   "ecr:GetDownloadUrlForLayer"
               ]
           }
       ]
   }
   ```

------

1. 在文本中，*IamRolePrincipalArn*用本指南前面部分的容器服务的 Amazon ECR 图像提取器 IAM 角色主体 ARN 替换。

   结果应该类似以下示例。  
![\[完成策略语句 JSON 文件示例\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/ecr-existing-policy-statement-json-completed.png)

1. 在计算机上的可访问位置将文件另存为 `ecr-policy.json`（例如，Windows 上的 `C:\Temp\ecr-policy.json` 或 macOS 或 Linux 上的 `/tmp/ecr-policy.json`）。

1. 记下 `ecr-policy.json` 文件的文件路径位置。您将在此过程后面部分的命令中指定它。

1. 打开命令提示符或终端窗口。

1. 输入以下命令，为要使用容器服务访问的私有存储库设置策略语句。

   ```
   aws ecr set-repository-policy --repository-name RepositoryName --policy-text file://path/to/ecr-policy.json --region AwsRegionCode
   ```

   在该命令中，将以下示例文本替换为自己的文本：
   + *RepositoryName*— 要为其添加策略的私有存储库的名称。
   + *path/to/*— 在本指南前面部分创建的计算机上`ecr-policy.json`文件的路径。
   + *AwsRegionCode*— 私有存储库的 AWS 区域 代码（例如，`us-east-1`）。

   示例：
   + 在 Windows 上：

     ```
     aws ecr set-repository-policy --repository-name my-private-repo --policy-text file://C:\Temp\ecr-policy.json --region us-east-1
     ```
   + 在 macOS 或 Linux 上：

     ```
     aws ecr set-repository-policy --repository-name my-private-repo --policy-text file:///tmp/ecr-policy.json --region us-east-1
     ```

   您应看到类似于以下示例的响应。  
![\[对 set-repository-policy命令的响应\]](http://docs.aws.amazon.com/zh_cn/lightsail/latest/userguide/images/ecr-set-policy-statement-response.png)

   如果您再次运行 `get-repository-policy` 命令，您应该会看到私有存储库上新的附加策略语句。您的容器服务现在能够访问您的私有存储库及其映像。要使用存储库中的映像，请将以下 URI 指定为您的容器服务部署的 **Image**（映像）值。在 URI 中，将示例*tag*替换为要部署的映像的标签。有关更多信息，请参阅[创建和管理容器服务的部署](amazon-lightsail-container-services-deployments.md)。

   ```
   AwsAccountId.dkr.ecr.AwsRegionCode.amazonaws.com/RepositoryName:ImageTag
   ```

   在 URI 中，将以下示例文本替换为自己的文本：
   + *AwsAccountId*— 您的 AWS 账号。
   + *AwsRegionCode*— 私有存储库的 AWS 区域 代码（例如，`us-east-1`）。
   + *RepositoryName*— 用于部署容器映像的私有存储库的名称。
   + *ImageTag*— 私有存储库中要部署在容器服务上的容器镜像的标签。

   示例：

   ```
   111122223333.dkr.ecr.us-east-1.amazonaws.com/my-private-repo:myappimage
   ```