

支援終止通知：2026 年 10 月 7 日 AWS 將停止 的支援 AWS IoT Greengrass Version 1。2026 年 10 月 7 日之後，您將無法再存取 AWS IoT Greengrass V1 資源。如需詳細資訊，請造訪[從 遷移 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS IoT Greengrass 在 Docker 容器中執行
<a name="run-gg-in-docker-container"></a>

AWS IoT Greengrass 可以設定為在 [Docker](https://www.docker.com/) 容器中執行。

您可以透過已安裝 AWS IoT Greengrass Core 軟體和相依性的 [Amazon CloudFront](what-is-gg.md#gg-docker-download) 下載 Dockerfile。若要修改 Docker 映像檔以在不同平台架構上執行或減少 Docker 映像檔的大小，請參閱 Docker 套件下載中的 `README` 檔案。

為了協助您開始試驗 AWS IoT Greengrass， AWS 也提供已安裝 AWS IoT Greengrass Core 軟體和相依性的預先建置 Docker 映像。您可以從 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) 或 [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) (Amazon ECR) 下載映像。這些預先建置映像使用 Amazon Linux 2 (x86\$164) 和 Alpine Linux (x86\$164、Armv7l 貨 AArch64) 的基本映像。

**重要**  
<a name="docker-images-end-of-maintenance"></a>2022 年 6 月 30 日，發佈至 Amazon Elastic Container Registry (Amazon ECR) 和 Docker Hub 的 AWS IoT Greengrass Core 軟體 v1.x Docker 映像的 AWS IoT Greengrass 結束維護。您可以繼續從 Amazon ECR 和 Docker Hub 下載這些 Docker 映像，直到 2023 年 6 月 30 日，也就是維護結束後 1 年。不過，在 2022 年 6 月 30 日結束維護之後， AWS IoT Greengrass Core 軟體 v1.x Docker 映像將不再收到安全修補程式或錯誤修正。如果您執行依賴這些 Docker 映像的生產工作負載，建議您使用 AWS IoT Greengrass 提供的 Dockerfile 建置自己的 Docker 映像。如需詳細資訊，請參閱[AWS IoT Greengrass Docker 軟體](what-is-gg.md#gg-docker-download)。

本主題說明如何從 Amazon ECR 下載 AWS IoT Greengrass Docker 映像，並在 Windows、macOS 或 Linux (x86\$164) 平台上執行。本主題包含以下步驟：

1. [從 Amazon ECR 取得 AWS IoT Greengrass 容器映像](#docker-pull-image)

1. [建立及設定 Greengrass 群組和核心](#docker-config-gg)

1. [在 AWS IoT Greengrass 本機執行](#docker-run-gg)

1. [為群組的容器化設定「No container」(無容器)](#docker-no-container)

1. [將 Lambda 函數部署至 Docker 容器](#docker-add-lambdas)

1. [（選用） 在 Docker 容器中部署與 Greengrass 互動的用戶端裝置](#docker-add-devices)

當您 AWS IoT Greengrass 在 Docker 容器中執行 時，不支援下列功能：<a name="docker-image-unsupported-features"></a>
+ 在 **Greengrass 容器**模式下執行[的連接器](connectors.md)。若要在 Docker 容器中執行連接器，連接器必須以 **No container (無容器)** 模式執行。若要尋找支援 **No container (無容器)** 模式的連接器，請參閱 [AWS提供的 Greengrass 連接器](connectors-list.md)。其中一些連接器具有隔離模式參數，您必須設定為 **No container (無容器)**。
+ [本機裝置和磁碟區資源](access-local-resources.md)。您在 Docker 容器中執行的使用者定義 Lambda 函數必須直接存取核心上的裝置和磁碟區。

當 Greengrass 群組的 Lambda 執行期環境設定為[無容器](lambda-group-config.md#no-container-mode)時，不支援這些功能，這是 AWS IoT Greengrass 在 Docker 容器中執行的必要項目。

## 先決條件
<a name="docker-image-prerequisites"></a>

開始本教學課程之前，您必須執行下列動作。<a name="docker-image-prereq-list"></a>
+ 您必須根據您選擇的 AWS Command Line Interface (AWS CLI) 版本，在主機電腦上安裝下列軟體和版本。

------
#### [ AWS CLI version 2 ]
  + [Docker](https://docs.docker.com/install/) 18.09 版或更新版本。舊版也可以運作，但我們建議使用 18.09 或更新版本。
  + AWS CLI 2.0.0 版或更新版本。
    + 若要安裝第 2 AWS CLI 版，請參閱[安裝第 2 AWS CLI 版](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
    + 若要設定 AWS CLI，請參閱[設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
**注意**  
若要在 Windows 電腦上升級至更新 AWS CLI 版本 2，您必須重複 [MSI 安裝](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html)程序。

------
#### [ AWS CLI version 1 ]
  + [Docker](https://docs.docker.com/install/) 18.09 版或更新版本。舊版也可以運作，但我們建議使用 18.09 或更新版本。
  + [Python](https://www.python.org/downloads/) 3.6 版或更新版本。
  + [pip](https://pip.pypa.io/en/stable/installing) 版本 18.1 或更新版本。
  + AWS CLI 1.17.10 版或更新版本
    + 若要安裝第 1 AWS CLI 版，請參閱[安裝第 1 AWS CLI 版](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html)。
    + 若要設定 AWS CLI，請參閱[設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。
    + 若要升級至最新版本的 第 1 AWS CLI 版，請執行下列命令。

      ```
      pip install awscli --upgrade --user
      ```
**注意**  
如果您在 Windows 上使用 AWS CLI 版本 1 的 [MSI 安裝](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows)，請注意下列事項：  
如果第 1 AWS CLI 版安裝無法安裝 botocore，請嘗試使用 [Python 和 pip 安裝](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip)。
若要升級至更新 AWS CLI 版本 1，您必須重複 MSI 安裝程序。

------
+ 若要存取 Amazon Elastic Container Registry (Amazon ECR) 資源，您必須授予下列許可。
  + Amazon ECR 要求使用者透過 AWS Identity and Access Management (IAM) 政策授予`ecr:GetAuthorizationToken`許可，才能向登錄檔進行身分驗證，並從 Amazon ECR 儲存庫推送或提取映像。如需詳細資訊，請參閱《[Amazon Elastic Container Registry 使用者指南》中的 Amazon ECR 儲存庫政策範例](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html)*和*[存取一個 Amazon ECR 儲存庫](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket)。

## 步驟 1：從 Amazon ECR 取得 AWS IoT Greengrass 容器映像
<a name="docker-pull-image"></a>

AWS 提供已安裝 AWS IoT Greengrass Core 軟體的 Docker 映像。

**警告**  <a name="docker-images-python-2.7-removal"></a>
從 AWS IoT Greengrass 核心軟體的 1.11.6 版開始，Greengrass Docker 映像不再包含 Python 2.7，因為 Python 2.7 在 2020 年達到end-of-life，且不再收到安全性更新。如果您選擇更新這些 Docker 映像，建議您先驗證應用程式是否使用新的 Docker 映像，再將更新部署到生產裝置。如果您為使用 Greengrass Docker 映像的應用程式需要 Python 2.7，您可以修改 Greengrass Dockerfile 以包含應用程式的 Python 2.7。

如需示範如何從 Amazon ECR 提取`latest`映像的步驟，請選擇您的作業系統：

### 提取容器映像 (Linux)
<a name="docker-pull-image-linux"></a>

在您的電腦終端機上執行下列命令。

1. <a name="docker-get-login"></a>登入 Amazon ECR 中的 AWS IoT Greengrass 登錄檔。

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   如果成功，輸出會顯示 `Login Succeeded`。

1. <a name="docker-docker-pull"></a>擷取 AWS IoT Greengrass 容器映像。

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**注意**  
`latest` 映像包含安裝在 Amazon Linux 2 基礎映像上最新穩定版本的 AWS IoT Greengrass Core 軟體。您也可以從儲存庫提取其他映像。若要尋找所有可用的映像，請檢查 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) 上的**標籤**頁面或使用 **aws ecr list-images**命令。例如：  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

1. 啟用 symlink 和 hardlink 保護。如果您正在實驗 AWS IoT Greengrass 容器中執行 ，您只能啟用目前開機的設定。
**注意**  
您可能需要使用 **sudo** 來執行這些命令。
   + 僅針對目前的開機裝置啟用設定：

     ```
     echo 1 > /proc/sys/fs/protected_hardlinks
     echo 1 > /proc/sys/fs/protected_symlinks
     ```
   + 使設定在重新啟動時保留：

     ```
     echo '# AWS IoT Greengrass' >> /etc/sysctl.conf 
     echo 'fs.protected_hardlinks = 1' >> /etc/sysctl.conf 
     echo 'fs.protected_symlinks = 1' >> /etc/sysctl.conf
     
     sysctl -p
     ```

1. <a name="docker-linux-enable-ipv4"></a>啟用 IPv4 網路轉送，這是 AWS IoT Greengrass 雲端部署和 MQTT 通訊在 Linux 上運作的必要條件。在 `/etc/sysctl.conf` 檔案中，將 `net.ipv4.ip_forward` 設為 1，然後重新載入 `sysctls`。

   ```
   sudo nano /etc/sysctl.conf
   # set this net.ipv4.ip_forward = 1
   sudo sysctl -p
   ```
**注意**  
您可以使用偏好的編輯器來取代 nano。

### 提取容器映像 (macOS)
<a name="docker-pull-image-mac"></a>

在您的電腦終端機上執行下列命令。

1. <a name="docker-get-login"></a>登入 Amazon ECR 中的 AWS IoT Greengrass 登錄檔。

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   如果成功，輸出會顯示 `Login Succeeded`。

1. <a name="docker-docker-pull"></a>擷取 AWS IoT Greengrass 容器映像。

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**注意**  
`latest` 映像包含安裝在 Amazon Linux 2 基礎映像上最新穩定版本的 AWS IoT Greengrass Core 軟體。您也可以從儲存庫提取其他映像。若要尋找所有可用的映像，請檢查 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) 上的**標籤**頁面或使用 **aws ecr list-images**命令。例如：  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

### 提取容器映像 (Windows)
<a name="docker-pull-image-windows"></a>

在命令提示中執行下列命令：要在 Windows 上使用 Docker 命令，必須先執行 Docker 桌面。

1. <a name="docker-get-login"></a>登入 Amazon ECR 中的 AWS IoT Greengrass 登錄檔。

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   如果成功，輸出會顯示 `Login Succeeded`。

1. <a name="docker-docker-pull"></a>擷取 AWS IoT Greengrass 容器映像。

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**注意**  
`latest` 映像包含安裝在 Amazon Linux 2 基礎映像上最新穩定版本的 AWS IoT Greengrass Core 軟體。您也可以從儲存庫提取其他映像。若要尋找所有可用的映像，請檢查 [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) 上的**標籤**頁面或使用 **aws ecr list-images**命令。例如：  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

## 步驟 2：建立及設定 Greengrass 群組和核心
<a name="docker-config-gg"></a>

Docker 映像已安裝 AWS IoT Greengrass Core 軟體，但您必須建立 Greengrass 群組和核心。這包括下載憑證和核心的組態檔案。
+ 請遵循 [單元 2：安裝 AWS IoT Greengrass 核心軟體](module2.md) 中的步驟。略過下載和執行 AWS IoT Greengrass 核心軟體的步驟。此軟體及其執行時間相依性已在 Docker 映像檔中設定。

## 步驟 3： AWS IoT Greengrass 在本機執行
<a name="docker-run-gg"></a>

設定完群組之後，您便能設定及啟動核心。如需示範執行方式的步驟，請選擇您的作業系統：

### 在本機執行 Greengrass (Linux)
<a name="docker-run-gg-linux"></a>

在您的電腦終端機上執行下列命令。

1. <a name="docker-create-certs-folder"></a>為裝置的安全資源建立資料夾，並將憑證和金鑰移至該資料夾。執行下列命令。以安全資源的路徑取代 *path-to-security-files*，並以檔案名稱中的憑證 ID 取代 *certificateId*。

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>為裝置的組態建立資料夾，並將 AWS IoT Greengrass 核心組態檔案移至該資料夾。執行下列命令。將 *path-to-config-file* 取代為組態檔案的路徑。

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>在 Docker 容器中啟動 AWS IoT Greengrass 並繫結掛載憑證和組態檔案。

   以解壓縮憑證和組態檔案的路徑取代 `/tmp`。

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   輸出應類似以下範例：

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### 在本機執行 Greengrass (macOS)
<a name="docker-run-gg-mac"></a>

在您的電腦終端機上執行下列命令。

1. <a name="docker-create-certs-folder"></a>為裝置的安全資源建立資料夾，並將憑證和金鑰移至該資料夾。執行下列命令。以安全資源的路徑取代 *path-to-security-files*，並以檔案名稱中的憑證 ID 取代 *certificateId*。

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>為裝置的組態建立資料夾，並將 AWS IoT Greengrass 核心組態檔案移至該資料夾。執行下列命令。將 *path-to-config-file* 取代為組態檔案的路徑。

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>在 Docker 容器中啟動 AWS IoT Greengrass 並繫結掛載憑證和組態檔案。

   以解壓縮憑證和組態檔案的路徑取代 `/tmp`。

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   輸出應類似以下範例：

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### 在本機執行 Greengrass (Windows)
<a name="docker-run-gg-windows"></a>

1. 為裝置的安全資源建立資料夾，並將憑證和金鑰移至該資料夾。在命令提示中執行下列命令：以安全資源的路徑取代 *path-to-security-files*，並以檔案名稱中的憑證 ID 取代 *certificateId*。

   ```
   mkdir C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-certificate.pem.crt C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-public.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-private.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\AmazonRootCA1.pem C:\Users\%USERNAME%\Downloads\certs
   ```

1. 為裝置的組態建立資料夾，並將 AWS IoT Greengrass 核心組態檔案移至該資料夾。在命令提示中執行下列命令：將 *path-to-config-file* 取代為組態檔案的路徑。

   ```
   mkdir C:\Users\%USERNAME%\Downloads\config
   move path-to-config-file\config.json C:\Users\%USERNAME%\Downloads\config
   ```

1. 在 Docker 容器中啟動 AWS IoT Greengrass 並繫結掛載憑證和組態檔案。在命令提示中執行下列命令。

   ```
   docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Docker 提示您與 Docker 協助程式共用 `C:\` 磁碟機時，允許其在 Docker 容器內綁定掛載 `C:\` 目錄。如需詳細資訊，請參閱 Docker 文件中的[共用磁碟機](https://docs.docker.com/docker-for-windows/#shared-drives)。

   輸出應類似以下範例：

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

**注意**  
如果容器不開啟 shell 和立即結束，您可以透過在您啟動映像時連結掛載 Greengrass 執行時間日誌來偵錯問題。如需詳細資訊，請參閱[將 Greengrass 執行時間日誌保留在 Docker 容器之外](#debugging-docker-persist-logs)。

## 步驟 4：為 Greengrass 群組的容器化設定「No container」(無容器)
<a name="docker-no-container"></a>

當您 AWS IoT Greengrass 在 Docker 容器中執行時，所有 Lambda 函數都必須在沒有容器化的情況下執行。在本步驟中，您會將群組的預設容器化設為 **No container (無容器)**。第一次部署群組之前，必須先執行此動作。

1. <a name="console-gg-groups"></a>在 AWS IoT 主控台導覽窗格的**管理**下，展開 **Greengrass 裝置**，然後選擇**群組 (V1)**。

1. <a name="group-choose-group"></a>選擇您希望變更設定的群組。

1. 選擇 **Lambda 函數**索引標籤。

1. 在**預設 Lambda 函數執行期環境中**，選擇**編輯**。

1. 在**編輯預設 Lambda 函數執行期環境中**，在**預設 Lambda 函數容器化**下，變更容器化設定。

1. 選擇**儲存**。

變更會在群組部署後生效。

如需詳細資訊，請參閱[為群組中的 Lambda 函數設定預設容器化](lambda-group-config.md#lambda-containerization-groupsettings)。

**注意**  
根據預設，Lambda 函數會使用群組容器化設定。如果您在 Docker **容器中執行 時，覆寫任何 Lambda 函數的無**容器設定，則部署會失敗。 AWS IoT Greengrass 

## 步驟 5：將 Lambda 函數部署至 AWS IoT Greengrass Docker 容器
<a name="docker-add-lambdas"></a>

您可以將長期 Lambda 函數部署到 Greengrass Docker 容器。
+ 請依照中的步驟[單元 3 （第 1 部分）： 上的 Lambda 函數 AWS IoT Greengrass](module3-I.md)，將長期 Hello World Lambda 函數部署至容器。

## 步驟 6：（選用） 部署與 Docker 容器中執行之 Greengrass 互動的用戶端裝置
<a name="docker-add-devices"></a>

您也可以部署在 Docker 容器中執行 AWS IoT Greengrass 時與 互動的用戶端裝置。
+ 依照 中的步驟[單元 4：與 AWS IoT Greengrass 群組中的用戶端裝置互動](module4.md)部署連接到核心的用戶端裝置，並傳送 MQTT 訊息。

## 停止 AWS IoT Greengrass Docker 容器
<a name="docker-stop"></a>

若要停止 AWS IoT Greengrass Docker 容器，請在終端機或命令提示中按 Ctrl\$1C。此動作會`SIGTERM`傳送至 Greengrass 協助程式程序，以銷毀 Greengrass 協助程式程序，以及由協助程式程序啟動的所有 Lambda 程序。Docker 容器是以 `/dev/init` 程序初始化為 PID 1，這有助於移除任何剩餘的 zombie 程序。如需詳細資訊，請參閱 [Docker 執行參考](https://docs.docker.com/engine/reference/commandline/run/#options)。

## 在 Docker AWS IoT Greengrass 容器中進行故障診斷
<a name="troubleshooting-docker-gg"></a>

使用以下資訊來協助疑難排解在 Docker 容器中執行 AWS IoT Greengrass 的問題。

### 錯誤：無法從非 TTY 裝置執行互動式登入。
<a name="docker-troubleshootin-ecr-get-login-password"></a>

**解決方案：**執行 `aws ecr get-login-password` 命令時，可能會發生此錯誤。請確定您已安裝最新版本 AWS CLI 2 或版本 1。我們建議您使用 第 2 AWS CLI 版。如需詳細資訊，請參閱「AWS Command Line Interface 使用者指南」**中的[安裝 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

### 錯誤：不明選項：-no-include-email。
<a name="docker-troubleshooting-cli-version"></a>

**解決方案：**執行 `aws ecr get-login` 命令時，可能會發生此錯誤。請確定您已安裝 AWS CLI 最新版本 （例如，執行：`pip install awscli --upgrade --user`)。如果您使用 Windows 並已使用 MSI 安裝程式安裝 CLI，您必須重新啟動安裝程序。如需詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的在 [Microsoft Windows AWS Command Line Interface 上安裝](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) 。

### 警告：IPv4 已停用。網路將無法運作。
<a name="docker-troubleshooting-ipv4-disabled"></a>

**解決方案：**在 Linux AWS IoT Greengrass 電腦上執行 時，您可能會收到此警告或類似訊息。如[此步驟](#docker-linux-enable-ipv4)所述啟用 IPv4 網路轉送。未啟用 IPv4 轉送時 AWS IoT Greengrass ，雲端部署和 MQTT 通訊無法運作。如需詳細資訊，請參閱 Docker 文件中的[在執行時間設定命名空間核心參數 (sysctls)](https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime)。

### 錯誤：防火牆封鎖了 Windows 和容器之間的檔案共用。
<a name="docker-troubleshooting-firewall"></a>

**解決方案：**在 Windows 電腦上執行 Docker 時，您可能收到此錯誤或 `Firewall Detected` 訊息。如果您登入虛擬私有網路 (VPN)，而您的網路設定防止掛載共用磁碟機，也可能會發生這個錯誤。在這種情況下，請關閉 VPN 並重新執行 Docker 容器。

### 錯誤：呼叫 GetAuthorizationToken 操作時發生錯誤 (AccessDeniedException)：User： arn：aws：iam：：<account-id>：user/<user-name> 未獲授權在資源上執行：ecr：GetAuthorizationToken： \$1
<a name="docker-troubleshooting-ecr-perms"></a>

如果您沒有足夠的許可來存取 Amazon ECR 儲存庫，則執行 `aws ecr get-login-password`命令時可能會收到此錯誤。如需詳細資訊，請參閱《[Amazon ECR 使用者指南》中的 Amazon ECR 儲存庫政策範例](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html)**[和存取一個 Amazon ECR 儲存庫](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html)。

如需一般 AWS IoT Greengrass 故障診斷說明，請參閱 [故障診斷 AWS IoT Greengrass](gg-troubleshooting.md)。

### 在 Docker AWS IoT Greengrass 容器中偵錯
<a name="debugging-docker-gg"></a>

為了對 Docker 容器的問題進行偵錯，您可以保留 Greengrass 執行時間日誌或將互動式 shell 連接到 Docker 容器。

#### 將 Greengrass 執行時間日誌保留在 Docker 容器之外
<a name="debugging-docker-persist-logs"></a>

您可以在繫結掛載`/greengrass/ggc/var/log`目錄之後執行 AWS IoT Greengrass Docker 容器。容器結束或移除之後，日誌仍會保留。

**在 Linux 或 macOS 上**  
[停止任何 Greengrass Docker 容器](#docker-stop)在主機上執行，接著在終端機中執行以下命令。此會連結掛載 Greengrass `log` 目錄並啟動 Docker 映像檔。  
以解壓縮憑證和組態檔案的路徑取代 `/tmp`。  

```
docker run --rm --init -it --name aws-iot-greengrass \
      --entrypoint /greengrass-entrypoint.sh \
      -v /tmp/certs:/greengrass/certs \
      -v /tmp/config:/greengrass/config \
      -v /tmp/log:/greengrass/ggc/var/log \
      -p 8883:8883 \
      216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
接著您可以在主機上的 `/tmp/log` 檢查日誌，以查看 Greengrass 在 Docker 容器內部執行的同時發生了什麼。

**在 Windows 上**  
[停止任何 Greengrass Docker 容器](#docker-stop)在主機上執行，接著在命令提示中執行以下命令。此會連結掛載 Greengrass `log` 目錄並啟動 Docker 映像檔。  

```
cd C:\Users\%USERNAME%\Downloads
mkdir log
docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -v c:/Users/%USERNAME%/Downloads/log:/greengrass/ggc/var/log -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
接著您可以在主機上的 `C:/Users/%USERNAME%/Downloads/log` 檢查日誌，以查看 Greengrass 在 Docker 容器內部執行的同時發生了什麼。

#### 將互動式 Shell 連接到 Docker 容器
<a name="debugging-docker-attach-shell"></a>

您可以將互動式 shell 連接到執行中的 AWS IoT Greengrass Docker 容器。這可協助您調查 Greengrass Docker 容器的狀態。

**在 Linux 或 macOS 上**  
Greengrass Docker 容器執行時，在獨立的終端機中執行以下命令。  

```
docker exec -it $(docker ps -a -q -f "name=aws-iot-greengrass") /bin/bash
```

**在 Windows 上**  
Greengrass Docker 容器執行時，在獨立的命令提示中執行以下命令。  

```
docker ps -a -q -f "name=aws-iot-greengrass"
```
從先前的命令中將 *gg-container-id* 取代為 `container_id` 結果。  

```
docker exec -it gg-container-id /bin/bash
```