ทำไมผู้ใช้เจนกินส์อาจไม่ได้รับอนุญาตให้เข้าถึงซ็อกเก็ตยูนิกซ์ Docker


9

ฉันได้เพิ่มjenkinsผู้ใช้ไปยังdockerกลุ่มที่คิดว่าจะอนุญาตให้งาน Jenkins เรียกใช้คำสั่ง Docker ได้ หากฉันเปลี่ยนไปjenkinsใช้ผู้ใช้ฉันสามารถตรวจสอบว่ามันใช้งานได้ (ด้วยตนเอง):

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

อย่างไรก็ตามในระหว่างการสร้าง / งาน Jenkins นั้นไม่ได้รับอนุญาต:

# 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 git@github.com:<redacted>/docker-base-images.git # timeout=10
Fetching upstream changes from git@github.com:<redacted>/docker-base-images.git
 > git --version # timeout=10
using GIT_SSH to set credentials 
 > git fetch --tags --progress git@github.com:<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

นี่คือกับนักเทียบท่า 1.3.0 และ Ubuntu 14.04.1 เบาะแสใด ๆ


ดูเหมือนว่าเกี่ยวข้องกับปัญหานี้ การรีบูตเครื่องแก้ไขปัญหานี้ให้ฉัน
smilly92

การรีบูตเครื่องไม่สามารถแก้ไขปัญหานี้ให้ฉันได้
Matt W

1
ดูเหมือนว่าเจนกินส์จะดร็อปกลุ่มอื่นที่ไม่ใช่กลุ่มหลักของเจนกินส์ เมื่อฉันรันคำสั่ง id จากเชลล์ในฐานะผู้ใช้ Jenkins ฉันเห็นว่ามันอยู่ในกลุ่มนักเทียบท่า แต่เมื่อฉันรัน id ในงานฟรีสไตล์มันจะแสดงเฉพาะผู้ใช้ Jenkins ฉันยังไม่ทราบวิธีการแก้ไข
Joseph Mulloy

ก่อนอื่นตรวจสอบให้แน่ใจว่าคุณมีผู้ใช้เจนกินส์ในกลุ่มนักเทียบท่า จากนั้นหากทาสที่คุณมีปัญหาเชื่อมต่อกับต้นแบบให้ปลดการเชื่อมต่อแล้วเชื่อมต่อใหม่อีกครั้ง ทำสิ่งนี้ผ่าน 'Manage jenkins' / 'Manage nodes'
arminmor

คำตอบ:


12

ฉันคิดว่าการให้สิทธิพิเศษแก่กลุ่มเจนกินส์เพื่อเชื่อมต่อซ็อกเก็ตยูนิกซ์แก้ปัญหา สิ่งนี้สามารถแก้ไขได้ด้วยการกำหนดค่าตัวเลือกการเริ่มต้น docker daemon ในไฟล์กำหนดค่าโดยเพิ่มบรรทัดนี้

DOCKER_OPTS=' -G jenkins'

ใน ubuntu /etc/default/dockerเป็นไฟล์กำหนดค่านักเทียบท่า


ยังคงเป็นโซลูชัน go-to ของฉันสำหรับการติดตั้งใหม่บน Ubuntu 16.04
lead_brogrammer

1

เรียกใช้groupsคำสั่งโดยใช้เจนกินส์ คุณเห็นdockerกลุ่มไหม ถ้าไม่ลองรีบูตเครื่องเจนกินส์นั่น หรือเพียงแค่ฆ่ากระบวนการทาส Jenkins: ps aux | grep jenkins


หลังจากทำตามขั้นตอนข้างต้นไม่กี่ขั้นตอนชิ้นสุดท้ายที่จะทำให้มันทำงานได้คือการเชื่อมต่อทาสเจนกินส์อีกครั้ง ขอบคุณสำหรับทิป.
Dean Poulin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.