Dockerを修正する方法:権限が拒否された問題が発生しました


303

Ubuntu OSがインストールされているマシンにDockerをインストールしました。ドッカーをインストールした後、実行すると

sudo docker run hello-world

すべて大丈夫ですがsudo、コマンドをより短くするために単語を非表示にしたいです。

単語なしでコマンドを書くと sudo

docker run hello-world

次のように表示されます。

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

作ってみると同じです

docker-compose up

どうすればこれを解決できますか?



回答:


439

root以外のユーザーとしてdockerを実行する場合は、dockerグループに追加する必要があります。

  1. Dockerグループが存在しない場合は作成します
$ sudo groupadd docker
  1. ユーザーをdockerグループに追加します。
$ sudo usermod -aG docker $USER
  1. 次のコマンドを実行するか、ログアウトして再度ログインして実行します(機能しない場合は、最初にマシンを再起動する必要があります)。
$ newgrp docker
  1. ルートなしでdockerを実行できるかどうかを確認する
$ docker run hello-world

docker公式ドキュメントから取得: manage-docker-as-a-non-root-user


70
3つのステップすべてを実行した後も、この問題が発生します "(
Anand

78
それを機能させるには、Ubuntu 18で再起動する必要がありました。ログアウトして再度ログインするだけでは機能しませんでした。
heez

26
@heez再起動は必要なかったかもしれませんが、Dockerを再起動するだけで十分でした。 sudo systemctl restart docker
ラトル

5
あることに注意してくださいdockerグループは、基本的に許可するrootアクセスを定期的にsudoポリシー&監査を強制せずに、。詳細と説明については、GitHubの問題#9976を参照してください。
raehik、2019年

13
dockerの再起動は機能せず、再起動のみが機能しました(Ubuntu 18.04)
Joakim Tall

360

アップグレード後、許可が得られませんでした。ユーザーがすでに「docker」グループに属していたため、「mkb」のインストール後の手順を実行しても何も変わりません。何度か再試行しましたが、成功せずに2回繰り返します。

検索時間の後、この次のソリューションは最終的に機能しました:

sudo chmod 666 /var/run/docker.sock

解決策はオルシャンスクから来ました。

アップグレードが 'docker'グループに対する十分な許可なしにソケットを再作成したように見えます。

問題

このハードchmodはセキュリティホールを開き、再起動するたびにこのエラーが何度も発生し、毎回上記のコマンドを再実行する必要があります。いつでも解決策が欲しい。そのため、2つの問題があります。

  • 1)の問題SystemD:ソケットは、所有者「root」とグループ「root」でのみ作成されます。

    この最初の問題は、次のコマンドで確認できます。

    ls -l /lib/systemd/system/docker.socket
    

    これで問題がなければ、「root/docker」ではなく「root/root」が表示されるはずです。

  • 2)グラフィカルログインの問題https : //superuser.com/questions/1348196/why-my-linux-account-only-belongs-to-one-group

    この2番目の問題は、次のコマンドで確認できます。

    groups
    

    すべてが正しければ、リストにdockerグループが表示されます。そうでない場合は、コマンドを試してください

    sudo su $USER  -c groups
    

    Dockerグループが表示される場合は、バグが原因です。

ソリューション

グラフィカルログインの回避策をなんとかして取得できた場合、これでうまくいくはずです。

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

しかし、このバグを管理できない場合、それほど悪くない解決策はこれである可能性があります:

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

これは、グラフィック環境にあり、おそらくコンピューター上の唯一のユーザーであるためです。どちらの場合も、再起動(またはsudo chmod 666 /var/run/docker.sock)が必要です


2
ドッカーがdocs.docker.com/installのドキュメントに従ってインストールされている場合 、そのようなコマンドを処理する必要はありません
Scott Stensland

4
@スコット・ステンランド私は何度も「ドキュメントに従って」Dockerをインストールしています。問題は、別の正体不明のパッケージとの不適切な相互作用から発生していると思います。
Galigator 2018年

1
ドッキングウィンドウ・イン・ドッキングウィンドウでは、私が間違ってなくて、ホストから/var/run/docker.sockを取り付けた:ro端に...すぐに私は私が行くには良かったと付け加えたとして
jakebrinkmann

2
EC2-AWSでubuntu 18を使用しており、完全に機能しました。他のすべて(sudo usermod -aG docker $ USERなど)は機能しませんでした
cherah30

1
ありがとう、Ubuntu 18.04 LTSで修正されました。再演してグラウドに追加しませんでした
Deepansh Parmani

32
  1. Dockerグループを追加
$ sudo groupadd docker
  1. 現在のユーザーをdockerグループに追加する
$ sudo usermod -aG docker $USER
  1. セッションをドッカーグループに切り替え
$ newgrp - docker
  1. テストする例を実行する
$ docker run hello-world

newgrpコマンドは、パスワードの入力を要求し、私のユーザーのパスワードを受け入れませんでした。代わりsu - $USERに、ログアウト/ログインを回避するように働きました。
bluenote10

18
  1. 現在のユーザーをdockerグループに追加
sudo usermod -aG docker $USER
  1. dockerデーモンに接続できるようにdockerソケットの権限を変更する /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

私はこのエラーを次のコマンドで解決します:

$ sudo chmod 666 /var/run/docker.sock

9

https://docs.docker.com/install/linux/linux-postinstall/のManage Docker as a non-root user段落をいつでも試すことができます docsの。

これを行った後も問題が解決しない場合は、次のコマンドを実行して問題を解決できます。

sudo chmod 666 /var/run/docker.sock

2
Dockerソケットを(を使用してchmod 666)すべてのユーザーが読み取りまたは書き込み可能にすると、セキュリティ上の問題が発生します...これは推奨されません。
Aayla Secura

6

unix:///var/run/docker.sockでDockerデーモンソケットに接続しようとしているときに権限が拒否されました:Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json:dial unix /var/run/docker.sock:接続:権限が拒否されました

sudo chmod 666 /var/run/docker.sock

これは私の問題を修正します。


2

この問題を解決するために、私はdockerとdocker-composeがインストールされている場所を検索しました。私の場合、dockerにインストールされ/usr/bin/dockerdocker-composeにインストールされました/usr/local/bin/docker-composeパス。次に、これを端末に書き込みます。

ドッカーするには:

sudo chmod +x /usr/bin/docker

docker-compose

sudo chmod +x /usr/local/bin/docker-compose

今、私は私のコマンドドッカーに言葉を書く必要はありません sudo

/ ************************************************* ********************** /

エラッタ:

この問題の最良の解決策は、@ mkasbergによってコメントされました。私はコメントを引用します:

That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

どうもありがとう!


2
それはうまくいくかもしれません、あなたは道の先で問題に遭遇するかもしれません。また、セキュリティの脆弱性でもあります。dockerドキュメントが言うように、自分をグループに追加するだけのほうがいいでしょう。sudo groupadd dockersudo usermod -aG docker $USER
mkasberg 2018

@mkasbergさん、こんにちは。コメントありがとうございます!私はあなたの解決策を引用するために正誤表を作りました。どうもありがとう!
Carlos Andres、

1

lightdmとkwalletには、ログイン時に補助グループを通過しないように見えるバグが含まれています。これを解決するために、私はのほかsudo usermod -aG docker $USERにコメントアウトする必要がありました

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

再起動する/etc/pam.d/lightdm 前にに、docker-groupが実際に有効になるようにします。

バグ:https : //bugs.launchpad.net/lightdm/+bug/1781418およびここ:https : //bugzilla.redhat.com/show_bug.cgi?id=1581495


1

このコマンドを使用

sudo usermod -aG docker $USER

次に、コンピュータを再起動します。これでうまくいきました。


1

真剣にみんな。グループにDockerを追加したり、ソケットposixを(SELinuxを強化せずに)変更したりしないでください。これは、ルート権限を作成する簡単な方法です。.bashrcにエイリアスを追加するだけです。エイリアスdc = 'sudo docker'のように、より簡単で安全です。


1

あなたはこれらのステップに従うことができ、これはあなたのために働くでしょう:

  1. Dockerグループを作成する sudo groupadd docker
  2. ユーザーをこのグループに追加します sudo usermod -aG docker $USER
  3. グループを一覧表示して、このコマンドを実行してdockerグループが正常に作成されたことを確認します groups
  4. 次のコマンドも実行して、Dockerグループのセッションを変更します newgrp docker
  5. ファイルdocker.sockのグループ所有権を変更するsudo chown root:docker /var/run/docker.sock
  6. .dockerディレクトリの所有権を変更する sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. 最終的に sudo chmod g+rwx "$HOME/.docker" -R

そのテストの後、実行できます docker ps -a


再起動を必要としない回答を求めていました。これがそれを提供した唯一の答えでした。「トリック」はchowndocker.sockファイルに対するものです。
Potherca

1

dockerをインストールし、「docker」グループを作成してユーザーを追加したら、dockerサービスユニットファイルを編集します。

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

[Service]セクションに2行追加します。

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

ファイルを保存します(Ctrl-X、y、Enter)

Dockerサービスを実行して有効にします。

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

0

CentosにDockerをインストールした後。以下のコマンドを実行中に、以下のエラーが発生しました。

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

docker.socketのグループと権限を変更する

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

以下のdockerコマンドを使用して確認する

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$

-4

sudo chmod 666 /var/run/docker.sock

これにより、Dockerにログインするときにもエラーが発生しましたが、システムで完全に機能します。


1
この方法を使用するのは非常に安全ではありません。メインの質問のコメントに記載されているインストール後の手順を確認します。
Alejandro VisiedoGarcía19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.