DevOps | Jenkins pipeline在shell指令碼執行docker許可權報錯
--昨夜西風凋碧樹,獨上高樓,望盡天涯路
採用Jenkins Pipeline流水線方式,通過Pipeline script中執行shell指令碼的方式構建docker映象的時候出現如下情況
錯誤:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post .....
dial unix /var/run/docker.sock: connect: permission denied Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post .....
dial unix /var/run/docker.sock: connect: permission denied
執行shell指令碼構建映象的命令如下:
原因:
docker程序使用Unix Socket而不是TCP埠。而預設情況下,Unix socket屬於root使用者,需要root許可權才能訪問。
docker守護程序啟動的時候,會預設賦予名字為docker的使用者組讀寫Unix socket的許可權,因此只要建立docker使用者組,並將當前使用者加入到docker使用者組中,那麼當前使用者就有許可權訪問Unix socket了,進而也就可以執行docker相關命令
解決辦法:
將jenkins使用者加入docker組並且重啟Jenkins服務:
sudo gpasswd -a jenkins docker //新增Jenkins使用者到docker使用者組
newgrp docker //更新docker使用者組
groups jenkins //檢視jenkins所在的使用者組
sudo service jenkins restart //重啟Jenkins服務
再次構建Pipeline流水線,構建成功:
檢視docker images: