はじめに
AWS CDKを使ってデプロイを試みたところ、以下のエラーに遭遇しました。
このエラーの原因と解決方法をまとめます。
ERROR: permission denied while trying to connect to the Docker daemon socket
原因
Dockerを使用する際、適切な権限が設定されていないことが原因でした。
具体的には、Dockerのユーザーグループが作成されておらず、現在のユーザーがグループに追加されていませんでした。
前提条件
・OSはUbuntsuを使用
・AWSアカウントの初期設定が完了し、ログインできる状態。
・Dockerがインストール済みであること。
解決方法
1. Dockerの権限状況を確認
まず、Dockerのソケットファイル(/var/run/docker.sock)の権限を確認します。
ls -l /var/run/docker.sock
出力例:
srw-rw---- 1 root root 0 Jan 9 16:58 /var/run/docker.sock
上記はrootグループにのみアクセス権がある状態です。
ここには現在のユーザーが含まれていないので新たにグループを作成し、そこにユーザーを追加していきます。
2. Dockerグループを作成
新規のDockerグループを作成します。
sudo groupadd docker
作成したグループを確認します。
cat /etc/group | grep docker
出力例:
docker:x:1001:
上記では グループ名:パスワードフィールド:パスワードID:属しているユーザー(いる場合)
が表示されています。現在ユーザーは存在していません。
3. ソケットファイルの権限を変更
手順1で権限を確認しましたね。こちらの権限をrootから先ほど作成したdockerグループへ変更します。
sudo chown root:docker /var/run/docker.sock
権限が変更されたことを確認します。
ls -l /var/run/docker.sock
出力例:
srw-rw---- 1 root docker 0 Jan 9 16:58 /var/run/docker.sock
権限が無事dockerグループに変更されました。
4. 現在のユーザーをdockerグループに追加
現在のユーザーをdockerグループに追加します。
sudo usermod -aG docker $USER
変更が反映されない場合は、ターミナルを再起動してください。
ユーザーが追加されたかどうかの確認は、手順3のcat /etc/group | grep docker
を実施して、末尾に自身のユーザー名が表記されていればOKです。
5. 権限の反映を確認
Dockerコマンドが正常に実行できるか確認します。
docker ps
エラーが出なければ設定完了です。
この後AWS CDKコマンドを実行したところ、成功しました。
おわりに
AWSもDockerも初めて触ったので、色々と苦戦しました。
何を確認するためにどのコマンドを打ったのか、すぐ忘れてしまうので少し丁寧に流れをまとめてあります。参考になれば幸いです。
参考