web-dev-qa-db-ja.com

unix:///var/run/docker.sockでDockerデーモンソケットに接続しようとしたときに、許可が拒否されました

私はdockerが初めてです。私はJenkinsと私のローカルマシン(Ubuntu 16.04)でdockerを使用しようとしました。

以下のパイプラインスクリプトで新しい仕事を設定しました。

node {
    stage('Build') {
      docker.image('maven:3.3.3').inside {
        sh 'mvn --version'
      }
    }
}

しかしそれは以下のエラーで失敗します。

enter image description here

70

ユーザーjenkinsをグループdockerに追加する必要があります。

Sudo usermod -a -G docker jenkins

その後Jenkinsを再起動します。

編集する

Dockerからこのメッセージを受け取ったためにスタックオーバーフローの問題にたどり着いたが、jenkinsを使用していない場合、おそらくエラーは同じです。特権のないユーザーはdockerグループに属していません。

できるよ:

Sudo usermod -a -G docker alice

またはあなたのユーザー名が何であれ。

最後にcat /etc/groupを実行して確認し、somethignを見てください。

docker:x:998:alice

いずれかの行に。

Ilya Kolesnikovさんがコメントで述べているように、ログインしなおしてください。

122
austingray

私の最初の解決策は以下のとおりです。

usermod -aG docker jenkins
usermod -aG root jenkins
chmod 664 /var/run/docker.sock

しかし、それらのどれも私のために働きません、私は試みました:

chmod 777 /var/run/docker.sock

それはうまくいきますが、それが正しい呼び出しかどうかはわかりません。

22
Kevin Garay

私にとって成功

Sudo usermod -a -G docker $USER
reboot
13
shellhub

私はjenkinsユーザーをrootグループに追加してjenkinsを再起動すると動作し始めました。

Sudo usermod -a -G root jenkins
Sudo service jenkins restart
11

2018-08-19

私はこれに何日も立ち往生しています、そしてなぜ私は完全な答えを見つけることができなかったので、私は同じ問題につまずく上記の答えがうまくいかない他の人々のためにそれを掲示するつもりです。

Dockerの中でJenkinsを実行する場合、これらは3つの重要なステップです。

  1. ホストからdockerを使用できるようにするために、ソケット/var/run/docker.sockをjenkinsコンテナにマウントします。
  2. あなたはそれを使用するためにコンテナの内側にdockerをインストールする必要があります。 これ は、その方法に関する素晴らしい簡単な記事です。新しいバージョンにはすでにdockerがインストールされている可能性があることに注意してください。
  3. Dockerグループにjenkinsを追加するためにSudo usermod -a -G docker jenkinsを実行します。ただし、Host dockerとcontainer dockerが同じグループIDを持っていない場合、パーミッションの問題に遭遇する可能性があります。コンテナdockerのgidを次のように調整することは非常に重要です。ホストdocker gid

これは起動スクリプトの一部として行うことも、単にexecを使用して手動で行うこともできます:groupmod -g <YOUR_Host_DOCKER_GID> docker

また、/var/run/docker.sockのアクセス権を777またはそれに近いものに変更しないでください。これは大きなセキュリティ上のリスクがあるためです。

お役に立てれば

9
Urosh T.

JenkinsをDockerで実行していて、JenkinsがホストマシンUbuntu 16.04から/var/run/docker.sockへのボリュームを介してDockerソケットを使用している。

私にとっての解決策は次のとおりです。

1)JenkinsのDockerコンテナ内(ホストマシンのdocker exec -it jenkins bash

usermod -a -G docker jenkins
chmod 664 /var/run/docker.sock
service jenkins restart (or systemctl restart jenkins.service)
su jenkins

2)ホストマシン上

Sudo service docker restart

664は、所有者およびグループからのユーザーに対して読み取りおよび書き込み(ただし実行はしない)を意味します。

6
heroin

2019-02-16

他の人が書いているのとほとんどのステップは私にとって同じでした。 しかし、上記の解決策でusermodを使ってグループdockerにjenkinsを追加することはできませんでした。

docker Hostから、および実行中のdockerコンテナから次のコマンドを試してみました。

Sudo usermod -a -G docker jenkins

(私はdocker Hostから次のコマンドでrunning docker containerに入りました:

docker exec -t -i my_container_id_or_name /bin/bash

docker Hostから受信しました:

usermod:ユーザー 'jenkins'は存在しません

docker containerから受信しました:

ローカルのシステム管理者からいつもの講義を受けていると信じています。それは通常、これら3つのことにまとめます:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[Sudo] jenkinsのパスワード:

パスワードを知りませんでした。

コマンドのSudo部分がないと、docker containerに入ってしまいます。

usermod:権限が拒否されました。 usermod:/ etc/passwdをロックできません。あとでもう一度試してみてください。

解決策:docker Hostからrunning docker containerに次のコマンドを入力しました。

docker exec -t -i -u root my_container_id_or_name /bin/bash

さて、私はrootとして入力し、次のコマンドを発行しました。

usermod -a -G docker jenkins

それから、docker Hostから、次のコマンドでrunning docker containerを再起動しました。

docker restart my_container_id_or_name

その後、私はジェンキンスの仕事を始め、それは成功して終了しました。

ユーザーusermodに対してjenkinsコマンドを発行するには、rootユーザーのみを使用しました。

1
Z3d4s

私の場合は、jenkinsユーザーをdockerグループに追加するだけでなく、そのグループをjenkinsユーザーのプライマリグループにすることも必要でした。

# usermod -g docker jenkins
# usermod -a -G jenkins jenkins

状況に応じて、jenkinsスレーブノードを再接続するかjenkinsサーバーを再起動することを忘れないでください。

1
Camilo Silva
Sudo usermod -a -G docker jenkins
Sudo service jenkins restart
1
Frank Hou

2019-05-26

これ は私のために働きました!

Docker-composeの例:

version: "3"
services:
  jenkins:
    image: jenkinsci/blueocean
    privileged: true
    ports:
      - "8080:8080"
    volumes:
      - $HOME/learning/jenkins/jenkins_home:/var/jenkins_home
    environment:
      - DOCKER_Host=tcp://socat:2375
    links:
      - socat

  socat:
     image: bpack/socat
     command: TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock
     volumes:
        - /var/run/docker.sock:/var/run/docker.sock
     expose:
        - "2375"
0
pham cuong

私がdockerでjenkinsを使うために作ったこのdockerイメージをチェックしてください。 https://hub.docker.com/r/fristonio/jenkins_docker/

使い方の説明を読んでください。また、Dockerfile をここで見ることができます

0
Deepesh Pathak

Jenkinsが実行されているサーバーで、使用しました

Sudo setfacl -m user:Tomcat:rw /var/run/docker.sock

そして、各docker containerを実行します

-v /var/run/docker.sock:/var/run/docker.sock

Setfaclを使用する方がより良いオプションのようで、「-u user」は必要ありません。その後、コンテナはJenkinsを実行しているのと同じユーザーとして実行されます。しかし、セキュリティの専門家からのフィードバックをいただければ幸いです。

0
java4africa