背景:不想在Jenkins 內部安裝Docker,想直接使用Jenkins服務所在的系統安裝的docker
當你在 Jenkins 中執行 docker
命令時,實際上是通過 Docker 客戶端與 Docker 守護進程進行通信。Docker 客戶端和守護進程之間的通信是通過一個名為 /var/run/docker.sock
的 Unix socket 進行的。默認情況下,只有 root
用戶和屬于 docker
組的用戶才有權限訪問這個 socket 文件。
當 Jenkins 嘗試運行 docker build
或其他 docker
命令時,它需要通過 /var/run/docker.sock
與 Docker 守護進程交互。如果 Jenkins 運行的用戶(通常是 jenkins
)沒有足夠的權限訪問這個 socket 文件,就會出現類似下面的錯誤
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
cd /var/run/
ls -l# 只有 root 和 docker 組的成員可以訪問/var/run/docker.sock
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock# jenkins 用戶添加到 docker 組
sudo usermod -aG docker jenkins# 期望輸出:jenkins : jenkins docker
groups jenkins
# 檢查 Jenkins 用戶的 Shell 設置 非交互式(bin/false)
grep jenkins /etc/passwd# 將Jenkins 用戶的 shell 修改為 /bin/bash 或其他合適的交互式 shell
sudo usermod -s /bin/bash jenkins# 檢查
grep jenkins /etc/passwd
#將 Jenkins 用戶添加到 Docker 組
sudo usermod -aG docker jenkinssudo su - jenkins# 期望輸出 jenkins 如果不生效,嘗試重啟系統 reboot
whoami# 嘗試jenkins能否使用外部docker
docker ps
目前你看到的 -bash-4.2$
是因為 Jenkins 用戶主目錄中沒有 .bashrc
、.bash_profile
等配置文件。你可以通過以下命令來修復這個問題:
exitcp /etc/skel/.bash* /var/lib/jenkins/
chown -R jenkins:jenkins /var/lib/jenkins/.bash*# 檢查
sudo su - jenkins
?