次のような単純なdockerコマンドを実行しようとすると:
$ docker ps -a
エラーメッセージが表示されます。
許可が拒否されました... /var/run/docker.sock:connect:permission denied
権限を確認するとき
$ ls -al /var/run/
次の行が表示されます。
srw-rw---- root docker docker.sock
そこで、多くのフォーラムからのアドバイスに従い、ローカルユーザーをdockerグループに追加します。
$ Sudo usermod -aG docker $USER
しかし、それは役に立ちません。まったく同じエラーメッセージが表示されます。どうすれば修正できますか?
シェルが初めての場合は、次のコマンドを使用します。
$ Sudo usermod -aG docker $USER
$USER
をシェルで定義する必要があります。これは多くの場合デフォルトで存在しますが、一部のシェルではログインIDに値を設定する必要がある場合があります。
ユーザーのグループを変更しても、ユーザーが開いている既存のログイン、ターミナル、シェルは変更されません。再度ログインを実行しないようにするには、次を実行するだけです:
$ newgrp docker
現在のシェルでそのグループにアクセスします。
これを実行すると、ユーザーは事実上サーバー上でルートアクセス権を持つようになるため、無制限のSudoアクセスで信頼されているユーザーに対してのみこれを行います。
$ echo $ USER
$ Sudo usermod -aG docker $ USER
$ sudo systemctl restart docker
$ docker ps
理由:エラーメッセージは、現在のユーザーがdockerエンジンにアクセスできないことを意味します。ユーザーには、UNIXソケットにアクセスしてエンジンと通信するための十分な権限がないためです。
クイックフィックス:
つまり、sudo docker ps
すなわち-Sudo chmod 777 /var/run/docker.sock
永続的な解決策:
現在のユーザーをdockerグループに追加します。これは次のように入力することで実現できます
Sudo usermod -a -G docker $ USER
注:変更を有効にするには、ログアウトしてから再度ログインする必要があります。
コメントで前述したように、変更は再ログインするまで適用されません。 SSHを実行して新しいターミナルを開くと、新しいターミナルで機能します。
ただし、GUIを使用して新しいターミナルを開いたため、変更は適用されませんでした。それがエラーが消えなかった理由です
それで、以下のコマンドはその仕事をしました、ただの再ログインは見逃されました
Sudo usermod -aG docker $USER
私のユーザーはADユーザーであるため、/ etc/groupファイルを手動で編集してADユーザーをローカルグループに追加する必要があります。残念ながら、adduserコマンドはnsswitchに対応していないようで、グループに誰かを追加するときにローカルに定義されていないユーザーを認識しません。
次に、/ etc/groupを再起動または更新します。これで、Sudoなしでdockerを使用できます。
よろしく。