Mengapa pengguna Jenkins tidak memiliki izin untuk mengakses soket uner Docker?

9

Saya telah menambahkan jenkinspengguna ke dockergrup berpikir bahwa itu akan memungkinkan pekerjaan Jenkins untuk menjalankan perintah Docker. Jika saya beralih ke jenkinspengguna, saya dapat memverifikasi itu berfungsi (secara manual):

ubuntu@hostname:~$ ps aux | grep java
jenkins   2210  9.5  7.5 1950316 292896 ?      Sl   00:01   1:00 /usr/bin/java -jar /data/jenkins/jenkins-1.586.war --httpPort=8080 -Xloggc:/var/log/jenkins/gc.log
ubuntu@hostname:~$ getent group docker
docker:x:999:jenkins
ubuntu@hostname:~$ ls -la /var/run/docker.*
-rw-r--r-- 1 root root   4 Oct 23 18:32 /var/run/docker.pid
srw-rw---- 1 root docker 0 Oct 23 18:32 /var/run/docker.sock
ubuntu@hostname:~$ sudo su -s /bin/bash jenkins
jenkins@hostname:/home/ubuntu$ docker ps
CONTAINER ID        IMAGE                      COMMAND                CREATED             STATUS              PORTS                     NAMES

Namun, selama membangun / pekerjaan Jenkins tidak memiliki izin:

# Job log
Started by user Matt Wright
Building on master in workspace /data/jenkins/jobs/docker-base-images-build/workspace
[ssh-agent] Using credentials CI-jenkins
[ssh-agent] Looking for ssh-agent implementation...
[ssh-agent]   Java/JNR ssh-agent
[ssh-agent] Started.
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url [email protected]:<redacted>/docker-base-images.git # timeout=10
Fetching upstream changes from [email protected]:<redacted>/docker-base-images.git
 > git --version # timeout=10
using GIT_SSH to set credentials 
 > git fetch --tags --progress [email protected]:<redacted>/docker-base-images.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 83c4463e7195b412a3a803dd7338210c1a772f55 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 83c4463e7195b412a3a803dd7338210c1a772f55
 > git rev-list 83c4463e7195b412a3a803dd7338210c1a772f55 # timeout=10
[workspace] $ /bin/sh -xe /tmp/hudson5606381166745886966.sh
+ ./build.sh
Sending build context to Docker daemon 
2014/10/24 16:14:18 Post http:///var/run/docker.sock/v1.15/build?rm=1&t=<redacted>%2Fpython%3A3.4: dial unix /var/run/docker.sock: permission denied
Build step 'Execute shell' marked build as failure
[ssh-agent] Stopped.
Notifying upstream projects of job completion
Finished: FAILURE

Ini dengan Docker 1.3.0 dan Ubuntu 14.04.1. Ada petunjuk?

Matt W
sumber
Tampaknya terkait dengan masalah ini . Rebooting memecahkan masalah ini untuk saya.
smilly92
Reboot tidak menyelesaikan ini untuk saya.
Matt W
1
Tampaknya Jenkins menjatuhkan grup selain grup utama pengguna Jenkins. Ketika saya menjalankan perintah id dari shell sebagai pengguna Jenkins saya melihat bahwa itu ada di grup buruh pelabuhan, tetapi ketika saya menjalankan id dalam pekerjaan freestyle, itu hanya menunjukkan pengguna Jenkins. Saya belum menemukan cara untuk memperbaikinya.
Joseph Mulloy
Pertama, pastikan Anda memiliki pengguna jenkins dalam grup buruh pelabuhan. Kemudian jika budak yang bermasalah dengan Anda terhubung ke master, lepaskan dan sambungkan kembali. Lakukan ini melalui 'kelola jenkins' / 'kelola node'.
arminmor

Jawaban:

12

Saya pikir memberikan hak istimewa kelompok jenkins ke docker unix socket memecahkan masalah. Ini dapat dimodifikasi dengan mengkonfigurasi opsi startup docker daemon dalam file konfigurasi dengan menambahkan baris ini

DOCKER_OPTS=' -G jenkins'

Di ubuntu /etc/default/dockeradalah file konfigurasi buruh pelabuhan.

Eldo
sumber
Ini masih solusi masuk saya untuk pemasangan baru di Ubuntu 16.04
lead_brogrammer
1

Jalankan groupsperintah menggunakan jenkins. Apakah Anda melihat dockergrup? Jika tidak, cobalah untuk me-reboot budak Jenkins itu. Atau cukup bunuh proses Jenkins slave.jar: ps aux | grep jenkins

Vanuan
sumber
Setelah melakukan beberapa langkah di atas, bagian terakhir untuk membuatnya bekerja adalah menghubungkan kembali budak jenkins. Terima kasih atas tipnya.
Dean Poulin