GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Dockerパーミッション拒否の問題のトラブルシューティング

Dockerを使用してアプリケーションを日常的に実行すると、接続の試行中にDocker権限が拒否されるなどのエラーが発生した場合、悪夢になる可能性があります。ただし、心配しないでください。この記事は、すぐに実行を再開するのに役立ちます。

このチュートリアルでは、恐ろしいDocker権限が拒否されたというエラーメッセージを解決する多くの方法を学びます。

前提条件

このチュートリアルは、実践的なデモンストレーションで構成されています。フォローするには、次のものが適切に配置されていることを確認してください。

  • このチュートリアルのデモはUbuntu20.04で実行されますが、他のLinuxディストリビューションでも機能します。
  • バージョン20.10.8を実行するチュートリアルを備えたDockerエンジンは、3967b7dをビルドします。

高度なDockerコマンドの実行

多くの要因が許可の拒否につながる可能性があります Dockerへの接続中にエラーが発生しました。これらの要因の1つは、sudoを付加せずにDockerコマンドを実行している可能性があることです。 指図。 sudo コマンドは、コマンドを実行するときにセキュリティ権限とともに昇格された管理者権限を与えるものです。

以下に、恐ろしい許可が拒否されましたを示します。 dockerを実行しようとしたときにエラーが発生しました コマンド。

ターミナルを起動し、sudoを先頭に追加します dockerに 以下のコマンドでrun hello-world Dockerイメージ。昇格したコマンドを実行しているため、続行するにはパスワードを入力する必要があります。

sudo docker run hello-world

以下に示すような出力が表示され、Dockerが正しくインストールされていることを示します。

Dockerエンジンの再起動

昇格されたDockerコマンドを実行しても、許可が拒否されましたが修正されない場合 エラーが発生した場合は、Dockerエンジンが実行されていることを確認してください。 dockerを実行するのと似ています sudoなしのコマンド コマンドを実行すると、Dockerエンジンが停止すると許可が拒否されました エラー。エラーをどのように修正しますか? Dockerエンジンを再起動する。

systemctlを実行します 以下のコマンドを使用して、Dockerエンジンのステータスを確認します(status docker )そしてそれが実行されているかどうか。

sudo systemctl status docker

以下では、アクティブ(実行中)を示す返されたステータスからDockerエンジンが実行中であることがわかります。

Dockerエンジンがアクティブでない場合は、systemctlを実行します 以下のコマンドを使用してDockerエンジンを起動します(start docker

sudo systemctl start docker

ここで、「昇格されたDockerコマンドの実行」セクションで行ったようにhello-world Dockerコマンドを実行して、エラーが解決されたことを確認します。

sudo docker run hello-world

root以外のユーザーアクセスを持つグループへのユーザーアカウントの追加

Dockerエンジンが機能していることを確認しましたが、Dockerの許可が拒否されました エラー?その場合は、root以外のユーザーアクセス権を持つグループにユーザーアカウントを追加する必要があります。なんで?ユーザーグループに属していないLinuxマシンで実行するDockerコマンドは、許可が拒否されましたをトリガーするためです。 エラー。

  1. groupaddを実行します 以下のコマンドを使用して、dockerという新しいグループを作成します 。コマンドの実行を続行するには、パスワードを入力してください。
sudo groupadd docker

Dockerグループがユーザーグループに存在する場合は、次のような出力が表示されます。

2.次に、usermodを実行します 以下のコマンド-aG オプションは、コマンドにユーザーアカウントを追加するように指示します(programmer )から(docker ) グループ。このコマンドにより、ユーザーアカウントに非ユーザーアクセスが許可されます。

sudo usermod -aG docker programmer

3. newgrpを実行します 以下のコマンドを使用して、現在の実際のグループIDをdockerに変更します。 グループ。

Dockerをroot以外のユーザーとして実行するたびに、このコマンドを実行します。

sudo newgrp docker 

4.最後に、hello-world Dockerイメージを再実行して、エラーが表示されなくなったことを確認します。この時点でまだエラーが発生する場合は、docker.sockファイルへのアクセスを増やすことを検討してください。 docker.sock fileはUNIXソケットであり、ユーザーとシステムの間でプロセス情報を伝達する方法であり、DockerデーモンがDockerAPIのエントリポイントとしてリッスンします。

chmod を実行します 以下のコマンドを使用して、すべてのユーザーに読み取り/書き込みを許可します(666/var/run/docker.sockへのアクセス ファイル。次に、hello-world Dockerイメージを再度実行して、エラーが解決されたかどうかを確認します。

sudo chmod 666 /var/run/docker.sock

Dockerサービスユニットファイルの編集

root以外のユーザーとしてDockerを実行してもエラーを修正できない場合は、Docker SystemD、サービス制御システム、サービスユニットファイルを編集してみてください。 Dockerサービスファイルには、Dockerデーモンの動作を変更する可能性のある機密パラメーターが含まれています。追加のコマンドを追加してサービスのデフォルトの動作を変更することで、Dockerユニットファイルのデフォルトの動作を変更できます。

1.以下のコマンドを実行して、お気に入りのテキストエディターでDockerサービスユニットファイルを開きます。この例では、Dockerサービスファイルがnanoテキストエディターで開きます。

sudo nano /usr/lib/systemd/system/docker.service

2.[サービス]でエリアを見つけます 以下に示すように、Dockerサービスユニットファイル内のヘッダー。以下のコマンドをDockerサービスユニットファイルにコピーして貼り付け、変更を保存します。

以下、SupplementaryGroups コマンドは、補足のUnixグループをプロセスが実行される場所に設定します。同時に、ExecStartPost コマンドは、サービスが正しく起動しなかった場合でも実行される操作をクリーンアップします。

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock

3.次に、以下のコマンドを実行して、Dockerサービスを再起動して有効にします。そうすることで、Dockerコマンドを実行するときにエラーが発生しないように、Dockerサービスを新たに開始できます。

# Reloads all the Docker unit files and recreates the entire dependency tree.
sudo systemctl daemon-reload
# Restarts the Docker service
sudo systemctl start docker
# Enable the Docker to run on your computer.
sudo systemctl enable docker

4.最後に、hello-worldを再実行します Dockerイメージを使用して、アクセス許可が拒否されたというエラーが引き続き発生するかどうかを確認します。

Dockerを特権モードで実行する

最後になりましたが、Docker権限拒否エラーの修正リストには、Dockerを特権モードで実行しています。そうすることで、Dockerコンテナにシステムへのルートアクセスが許可されます。

Dockerを特権モードで実行することは危険であり、ハッカーからの攻撃に対して脆弱です。したがって、注意して、自分が何をしているかを正確に理解している場合にのみ、Dockerを特権モードで実行してください。

1.以下のコマンドを実行して、システム内のすべてのDockerコンテナーを一覧表示し、実行するコンテナーのIDを取得します。

sudo docker ls -a

2.次に、docker inspectを実行します 以下のコマンドを実行して、実行するコンテナがすでに特権モードになっているかどうかを確認します(--format='{{.HostConfig.Privileged}}' )。 CONTAINER_IDを置き換えます 以下に、手順1でメモした実際のコンテナIDを示します。

docker inspect --format='{{.HostConfig.Privileged}}' CONTAINER_ID

コンテナが特権モードの場合、コマンドは trueを返します コンソールへの値。ただし、以下に示すように、コマンドがfalse値を返した場合は、次の手順に進みます。

3.最後に、dockerを実行します 以下のコマンドでrun 特権モードのDockerコンテナ(--privileged hello-world )。

sudo docker run --privileged hello-world

結論

このチュートリアルを通じて、Dockerの許可が拒否されたを解決する多くの方法を学びました。 エラー、昇格されたコマンドの実行から特権モードでのDockerの実行まで。

これで、Dockerを利用したアプリケーションを構築するときにエラーを取り除く方法がわかりました。 Dockerイメージを常にクリーンに保ちたいと思うかもしれませんか?


Docker
  1. Ubuntu 20.04でのDockerの問題?

  2. DockerInspectコマンドの使用方法

  3. UbuntuでDocker権限拒否エラーを修正する方法

  1. Dockerpsコマンドの便利な例

  2. 「docker images」コマンド エラー – 「許可が拒否されました」

  3. 「13:許可が拒否されました」が原因で NGINX Docker を実行できません

  1. 「docker stats」コマンド出力について

  2. docker コマンドが見つかりません

  3. docker.sock 許可が拒否されました