Docker部署的Jenkins打包后端項目運行報錯:no DOCKER_HOST environment variable, no read/writable '/var/run/docker.sock' or '//./pipe/docker_engine' and no external provider like Docker machine(容器內(nèi)卻能執(zhí)行成功)
一:錯誤信息
報錯信息如下:

根本原因是 Jenkins容器未正確掛載宿主機的Docker守護進程,導致插件無法通過默認路徑(/var/run/docker.sock)與Docker通信 或 權(quán)限問題。
二:解決方案?一
1、掛載Docker Socket 并以 root 用戶運行 Jenkins 容器
?適用場景?:Jenkins容器需要直接調(diào)用宿主機的Docker引擎(DinD模式)。
操作步驟?:
1、重新啟動Jenkins容器?,掛載宿主機Docker套接字和二進制
文件:
docker run -d \
--name jenkins \
-p 8080:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \ # 掛載Docker套接字
-v $(which docker):/usr/bin/docker \ # 掛載Docker命令行工具
-v jenkins_home:/var/jenkins_home \
-u root \ # 以root用戶運行(避免權(quán)限問題)注意?:長期使用 root 用戶存在安全風險,建議僅用于調(diào)試。
jenkins/jenkins:lts
關(guān)鍵點?:-u root 確保容器內(nèi)用戶有權(quán)限訪問docker.sock(生產(chǎn)環(huán)境建議改用jenkins用戶+組權(quán)限配置)。
備注:如果容器已經(jīng)添加了很多插件不想刪除重新啟動,則修改權(quán)限或添加用戶組,如下方案
三:解決方案二
驗證權(quán)限?(可選): 進入容器檢查docker.sock的權(quán)限:
docker exec -it 容器名稱 ls -l /var/run/docker.sock
查詢?nèi)缦拢?/p>

可以看出關(guān)鍵問題是權(quán)限不足導致
權(quán)限不足?:s--------T 表示只有文件所有者(jenkins)有讀寫權(quán)限,但 jenkins 用戶可能未正確加入 docker 組(GID 994)。
T標志位?:T(粘滯位)通常不影響訪問,但結(jié)合權(quán)限限制會加劇問題。
操作如下:
1. 修改 docker.sock 權(quán)限(臨時方案)?
# 在宿主機執(zhí)行(非容器內(nèi)): sudo chmod 666 /var/run/docker.sock # 開放全局讀寫權(quán)限(不安全,僅調(diào)試用)
注意?:此方法會降低安全性,僅用于臨時驗證問題。驗證后需恢復權(quán)限并采用以下安全方案。
2、 將 jenkins 用戶加入 docker 組(推薦)?
步驟 1:確認宿主機 docker 組信息?
# 在宿主機執(zhí)行:
getent group docker
輸出示例:
docker:x:994:user1,user2 # GID為994,當前成員為user1,user2
步驟 2:在 Jenkins 容器內(nèi)同步 docker 組?
# 進入Jenkins容器: docker exec -it jenkins3 /bin/bash # 在容器內(nèi)執(zhí)行: groupadd -g 994 docker # 創(chuàng)建與宿主機同GID的docker組 usermod -aG docker jenkins # 將jenkins用戶加入docker組 exit # 重啟容器使配置生效: docker restart jenkins3
步驟 3:驗證權(quán)限?
docker exec -it jenkins3 ls -l /var/run/docker.sock
預期輸出:
srw-rw----. 1 jenkins docker 0 Oct 23 11:23 /var/run/docker.sock
若成功,jenkins 用戶應能正常訪問 Docker。
再次嘗試,打包成功。。。

本文來自博客園,作者:攻城獅-tester,轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/zcjbky/p/19160466

浙公網(wǎng)安備 33010602011771號