1. 程式人生 > >DevOps | Jenkins pipeline在shell指令碼執行docker許可權報錯

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: