AWS IoT Greengrass Core バージョン 2 で Docker コンテナを実行するコンポーネントのデプロイに失敗しました。このエラーを解決したいと考えています。
簡単な説明
Docker コンテナを実行する AWS IoT Greengrass コンポーネントがデプロイに失敗するエラーは通常、アクセス許可の問題から起こります。
コンポーネントのデプロイが失敗した場合のエラーメッセージ例を以下に示します。
com.example.RaspberryDockerComponent: stderr. permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/load?quiet=1": dial unix /var/run/docker.sock: connect: permission denied. {scriptName=services.com.example.RaspberryDockerComponent.lifecycle.Install.Script, serviceName=com.example.RaspberryDockerComponent, currentState=NEW}
解決方法
Docker コンテナを実行する AWS IoT Greengrass コンポーネントを正常にデプロイするには以下のいずれかのアクセス許可を変更します。
- (ベストプラクティス) 非ルートまたは非管理者ユーザーが実行できるように Docker コンテナを設定します。
- コンポーネントをデプロイするユーザーに、ルートアクセス許可または管理者アクセス許可を付与します。
アクセス許可拒否エラーを受け取ったユーザーがいた場合、そのユーザーを管理者ユーザーは Docker グループに追加します。ユーザーは、Docker グループのメンバーになったため、管理者権限なしでコマンドを実行できます。
ユーザーアクセス許可を追加するには次の手順を実行します。
-
ggc_user を Docker グループに追加するには、以下のコマンドを実行します。
sudo usermod -aG docker ggc_user
注: コマンド内で、ggc\ _user をルート外のユーザーに置き換えます。
-
ユーザーアクセス許可の更新を適用するために AWS IoT Greengrass を再起動するには、以下のコマンドを実行します。
systemctl restart greengrass
-
コンポーネントを再デプロイしたうえで、ユーザーがコマンドを実行できることを確認します。
関連情報
Run a Docker container