私はdockerが初めてです。私はJenkinsと私のローカルマシン(Ubuntu 16.04)でdockerを使用しようとしました。
以下のパイプラインスクリプトで新しい仕事を設定しました。
node {
stage('Build') {
docker.image('maven:3.3.3').inside {
sh 'mvn --version'
}
}
}
しかしそれは以下のエラーで失敗します。
ユーザー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さんがコメントで述べているように、ログインしなおしてください。
私の最初の解決策は以下のとおりです。
usermod -aG docker jenkins
usermod -aG root jenkins
chmod 664 /var/run/docker.sock
しかし、それらのどれも私のために働きません、私は試みました:
chmod 777 /var/run/docker.sock
それはうまくいきますが、それが正しい呼び出しかどうかはわかりません。
私にとって成功
Sudo usermod -a -G docker $USER
reboot
私はjenkinsユーザーをrootグループに追加してjenkinsを再起動すると動作し始めました。
Sudo usermod -a -G root jenkins
Sudo service jenkins restart
2018-08-19
私はこれに何日も立ち往生しています、そしてなぜ私は完全な答えを見つけることができなかったので、私は同じ問題につまずく上記の答えがうまくいかない他の人々のためにそれを掲示するつもりです。
Dockerの中でJenkinsを実行する場合、これらは3つの重要なステップです。
/var/run/docker.sock
を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またはそれに近いものに変更しないでください。これは大きなセキュリティ上のリスクがあるためです。
お役に立てれば
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
は、所有者およびグループからのユーザーに対して読み取りおよび書き込み(ただし実行はしない)を意味します。
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ユーザーのみを使用しました。
私の場合は、jenkins
ユーザーをdocker
グループに追加するだけでなく、そのグループをjenkins
ユーザーのプライマリグループにすることも必要でした。
# usermod -g docker jenkins
# usermod -a -G jenkins jenkins
状況に応じて、jenkinsスレーブノードを再接続するかjenkinsサーバーを再起動することを忘れないでください。
Sudo usermod -a -G docker jenkins
Sudo service jenkins restart
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"
私がdockerでjenkinsを使うために作ったこのdockerイメージをチェックしてください。 https://hub.docker.com/r/fristonio/jenkins_docker/
使い方の説明を読んでください。また、Dockerfile をここで見ることができます
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を実行しているのと同じユーザーとして実行されます。しかし、セキュリティの専門家からのフィードバックをいただければ幸いです。