

サポート終了通知: 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)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Docker コンテナ AWS IoT Greengrass での実行
<a name="run-gg-in-docker-container"></a>

AWS IoT Greengrass は、[Docker](https://www.docker.com/) コンテナで実行するように設定できます。

 AWS IoT Greengrass Core ソフトウェアと依存関係がインストールされている Dockerfile は、[Amazon CloudFront から](what-is-gg.md#gg-docker-download)ダウンロードできます。Docker イメージを変更してさまざまなプラットフォームアーキテクチャで実行するか、Docker イメージのサイズを小さくするには、Docker パッケージダウンロードの `README` ファイルを参照してください。

の実験を開始できるように AWS IoT Greengrass、 には AWS IoT Greengrass Core ソフトウェアと依存関係がインストールされている構築済みの Docker イメージ AWS も用意されています。イメージは、[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\_64) および Alpine Linux (x86\_64、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 を終了しました。これらの Docker イメージは、メンテナンス終了から 1 年後の 2023 年 6 月 30 日まで、Amazon ECR および Docker Hub から引き続きダウンロードすることができます。ただし、2022 年 6 月 30 日のメンテナンス終了後、 AWS IoT Greengrass Core ソフトウェア v1.x Docker イメージはセキュリティパッチやバグ修正を受け取らなくなりました。これらの Docker イメージに依存する本稼働ワークロードを実行する場合は、 AWS IoT Greengrass が提供する Dockerfiles を使用して独自の Docker イメージを構築することをお勧めします。詳細については、「[AWS IoT Greengrass Docker ソフトウェア](what-is-gg.md#gg-docker-download)」を参照してください。

このトピックでは、Amazon ECR から AWS IoT Greengrass Docker イメージをダウンロードし、Windows、macOS、または Linux (x86\_64) プラットフォームで実行する方法について説明します。以下の各ステップを示します。

1. [Amazon ECR から AWS IoT Greengrass コンテナイメージを取得する](#docker-pull-image)

1. [Greengrass のグループとコアを作成して設定する](#docker-config-gg)

1. [ AWS IoT Greengrass ローカルで を実行する](#docker-run-gg)

1. [グループの「コンテナなし」コンテナ化を設定する](#docker-no-container)

1. [Lambda 関数を Docker コンテナにデプロイする](#docker-add-lambdas)

1. [(オプション) Docker コンテナで Greengrass を操作するクライアントデバイスをデプロイする](#docker-add-devices)

Docker コンテナ AWS IoT Greengrass で を実行する場合、以下の機能はサポートされていません。<a name="docker-image-unsupported-features"></a>
+ **[Greengrass container]** (Greengrass コンテナ) モードで実行される[コネクタ](connectors.md)。Docker コンテナでコネクタを実行するには、コネクタを**コンテナなし**モードで実行する必要があります。**コンテナなし**モードをサポートするコネクタを検索するには、「[AWSが提供する Greengrass コネクタ](connectors-list.md)」を参照してください。これらのコネクタの一部では、分離モードパラメータを使用されており、[**コンテナなし**] に設定する必要があります。
+ [ローカルデバイスおよびボリュームリソース](access-local-resources.md)。Docker コンテナで実行されるユーザー定義 Lambda 関数は、コア上のデバイスとボリュームに直接アクセスする必要があります。

これらの機能は、Greengrass グループの Lambda ランタイム環境が、Docker [コンテナで実行するために必要なコンテナなし](lambda-group-config.md#no-container-mode)に設定されている場合はサポートされていません。 AWS IoT Greengrass 

## 前提条件
<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 以降。
    +  AWS CLI バージョン 2 をインストールするには、[「バージョン 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 以降
    +  AWS CLI バージョン 1 をインストールするには、[「バージョン 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)を使用する場合は、次の点に注意してください。  
 AWS CLI バージョン 1 のインストールで 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 では、レジストリに対して認証し、Amazon ECR リポジトリからイメージをプッシュまたはプルする前に、 AWS Identity and Access Management (IAM) ポリシーを通じてアクセス`ecr:GetAuthorizationToken`許可を付与する必要があります。詳細については、「Amazon ECR ユーザーガイド」の「[Amazon ECR Repository Policy Examples](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html)」(Amazon ECR リポジトリポリシーの例) および「[1 つの 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 Core ソフトウェアの v1.11.6 以降、Greengrass Docker イメージには Python 2.7 が含まれなくなりました。Python 2.7 は 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) の **[Tags]** (タグ) ページを確認するか、**aws ecr list-images** コマンドを使用してください。例:  

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

1. シンボリックリンクとハードリンクの保護を有効にします。コンテナ 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> AWS IoT Greengrass クラウドデプロイと MQTT 通信が Linux で動作するために必要な IPv4 ネットワーク転送を有効にします。`/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) の **[Tags]** (タグ) ページを確認するか、**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) の **[Tags]** (タグ) ページを確認するか、**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 Core ソフトウェアのインストール](module2.md)」のステップを実行してください。 AWS IoT Greengrass Core ソフトウェアをダウンロードして実行するステップをスキップします。このソフトウェアとその実行時の依存関係は、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}} (セキュリティファイルへのパス) をセキュリティリソースへのパスに置き換え、{{certificateId}} をファイル名に含まれる証明書 ID に置き換えます。

   ```
   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 Core 設定ファイルを移動します。以下のコマンドを実行します。{{configuration-file-path}} を、設定ファイルへのパスに置き換えます。

   ```
   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}} (セキュリティファイルへのパス) をセキュリティリソースへのパスに置き換え、{{certificateId}} をファイル名に含まれる証明書 ID に置き換えます。

   ```
   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 Core 設定ファイルを移動します。以下のコマンドを実行します。{{configuration-file-path}} を、設定ファイルへのパスに置き換えます。

   ```
   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}} (セキュリティファイルへのパス) をセキュリティリソースへのパスに置き換え、{{certificateId}} をファイル名に含まれる証明書 ID に置き換えます。

   ```
   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 Core 設定ファイルを移動します。コマンドプロンプトで次のコマンドを実行します。{{configuration-file-path}} を、設定ファイルへのパスに置き換えます。

   ```
   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 で `C:\` ドライブを Docker デーモンと共有するように要求されたら、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
   ```

**注記**  
コンテナがシェルを開かずにすぐに終了する場合は、イメージを起動したときに Greengrass ランタイムログをバインドマウントすることで問題をデバッグできます。詳細については、「[Docker コンテナの外部で Greengrass ランタイムログを永続化する](#debugging-docker-persist-logs)」を参照してください。

## ステップ 4: Greengrass グループの「コンテナなし」コンテナ化を設定する
<a name="docker-no-container"></a>

Docker コンテナ AWS IoT Greengrass で を実行する場合、すべての Lambda 関数はコンテナ化なしで実行する必要があります。このステップでは、グループのデフォルトのコンテナ化を [**No container (コンテナなし)**] に設定します。グループを初めてデプロイする前に行う必要があります。

1. <a name="console-gg-groups"></a> AWS IoT コンソールナビゲーションペインの**「管理**」で **Greengrass デバイス**を展開し、**「グループ (V1)**」を選択します。

1. <a name="group-choose-group"></a>設定を変更するグループを選択します。

1. **[Lambda functions]** (Lambda 関数) タブを選択します。

1. **[Default Lambda function runtime environment]** (デフォルトの Lambda 関数ランタイム環境) から、**[Edit]** (編集) を選択します。

1. **[Edit default Lambda function runtime environment]** (デフォルトの Lambda 関数ランタイム環境を編集する) の、**[Default Lambda function containerization]** (デフォルトの Lambda 関数のコンテナ化) でコンテナ化の設定を変更します。

1. **[保存]** を選択します。

変更は、グループのデプロイ時に反映されます。

詳細については、「[グループ内の Lambda 関数のコンテナ化のデフォルト設定](lambda-group-config.md#lambda-containerization-groupsettings)」を参照してください。

**注記**  
デフォルトでは、Lambda 関数はグループコンテナ化設定を使用します。 AWS IoT Greengrass を Docker コンテナで実行しているときに、Lambda 関数の **[No container]** (コンテナなし) 設定を上書きすると、デプロイは失敗します。

## ステップ 5: Lambda 関数を Docker AWS IoT Greengrass コンテナにデプロイする
<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 メッセージを送信します。

## Docker AWS IoT Greengrass コンテナの停止
<a name="docker-stop"></a>

Docker AWS IoT Greengrass コンテナを停止するには、ターミナルまたはコマンドプロンプトで Ctrl\+C を押します。このアクションにより、`SIGTERM` が Greengrass デーモンプロセスに送信され、Greengrass デーモンプロセスとデーモンプロセスで開始されたすべての Lambda プロセスが破棄されます。Docker コンテナは `/dev/init` プロセスで PID 1 として初期化されます。これにより、残存するゾンビ状態のプロセスが削除されます。詳細については、[Docker run リファレンス](https://docs.docker.com/engine/reference/commandline/run/#options)を参照してください。

## Docker コンテナ AWS IoT Greengrass でのトラブルシューティング
<a name="troubleshooting-docker-gg"></a>

以下の情報は、Docker コンテナ AWS IoT Greengrass で を実行する際の問題のトラブルシューティングに役立ちます。

### 次のエラーが発生する。Cannot perform an interactive login from a non TTY device。
<a name="docker-troubleshootin-ecr-get-login-password"></a>

**解決策:** `aws ecr get-login-password` コマンドを実行すると、このエラーが発生することがあります。最新の AWS CLI バージョン 2 またはバージョン 1 がインストールされていることを確認してください。 AWS CLI バージョン 2 を使用することをお勧めします。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[Installing the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。

### エラー「Unknown options: -no-include-email」が発生する。
<a name="docker-troubleshooting-cli-version"></a>

**解決策:** `aws ecr get-login` コマンドを実行すると、このエラーが発生することがあります。 AWS CLI 最新バージョンがインストールされていることを確認します (例: run: `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 is disabled. Networking will not work.
<a name="docker-troubleshooting-ipv4-disabled"></a>

**解決策:** Linux コンピュータ AWS IoT Greengrass で を実行すると、この警告または同様のメッセージが表示されることがあります。[このステップ](#docker-linux-enable-ipv4)で説明されているように、IPv4 ネットワーク転送を有効にします。IPv4 転送が有効になっていない場合、 AWS IoT Greengrass クラウドデプロイと MQTT 通信は機能しません。詳細については、Docker ドキュメントの「[Configure namespaced kernel parameters (sysctls) at runtime](https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime)」を参照してください。

### エラー: A firewall is blocking file Sharing between windows and the containers.
<a name="docker-troubleshooting-firewall"></a>

**解決策:** Windows コンピュータで Docker を実行すると、このエラーまたは `Firewall Detected` メッセージが表示されることがあります。このエラーは、仮想プライベートネットワーク (VPN) にサインインしていて、ネットワーク設定が原因で共有ドライブをマウントできない場合にも発生することがあります。このような場合は、VPN をオフにし、Docker コンテナを再実行します。

### エラー: An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::<account-id>:user/<user-name> is not authorized to perform: ecr:GetAuthorizationToken on resource: \*
<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)」および「[1 つの 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 ランタイムログを維持するか、Docker コンテナにインタラクティブシェルをアタッチすることができます。

#### Docker コンテナの外部で Greengrass ランタイムログを永続化する
<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 コンテナ内で実行されている間に何が起こったのかを確認できます。

#### インタラクティブシェルを Docker コンテナにアタッチするには
<a name="debugging-docker-attach-shell"></a>

実行中の 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
```