Ubuntu 18.04下Couldn't connect to Docker daemon at http+docker://localunixsocket解決辦法


  一台服務器系統為:Ubuntu 18.04 LTS,上面建了git裸倉庫,用於開發吧代碼push到這里。同時WEB測試環境通過docker也部署在這台。通過git鈎子post-receive,當有新代碼提交是,就自動將最新的代碼checkout到web測試目錄,然后在手動重啟容器,讓java程序生效。由於代碼更新頻繁,手動重啟太麻煩,就在git鈎子post-receive腳本里增加了docker-compose restart的代碼,然后提交代碼是就會出現下面的錯誤:

remote: Couldn't connect to Docker daemon at http+docker://localunixsocket - isit running?
remote: If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

 post-receive的腳本如下:

#!/bin/sh
WEBDIR=/data/webroot
/usr/bin/git --work-tree=${WEBDIR} clean -fd
/usr/bin/git --work-tree=${WEBDIR} checkout --force
#sudo chown -R www:www ${WEBDIR}
/usr/bin/docker-compose -f /docker-tomcat/docker-compose.yml restart

初看那個錯誤是提示docker-compose連不上docker daemon,連接docker daemon有兩種方式,一種是通過TCP協議,一種是通過unixsocket。docker默認是通過unixsocket來通信的。

我在/var/run目錄下找到了docker.sock文件:

原來這個文件的只有root用戶和docker組用戶可以訪問,而我的git鈎子是在git賬號下運行的,於是:

usermod -aG docker git

把git用戶加入到docker組,再次提交更行代碼,容器可以自動重啟了。

還有一種方法是修改docker daemon使用TCP協議啟動:

find / -name docker.service

使用find找到docker.service 文件 /lib/systemd/system/docker.service

vim /lib/systemd/system/docker.service

在 ExecStart=/usr/bin/dockerd 后面加入 -H tcp://127.0.0.1:4243,保存后

systemctl daemon-reload
systemctl restart docker.service

重啟docker daemon,通過ss可以看到已經監聽4243端口

root@docker:/# ss -atol
State                  Recv-Q                  Send-Q                                    Local Address:Port                                     Peer Address:Port                  
LISTEN                 0                       128                                           127.0.0.1:4243                                          0.0.0.0:*                     
LISTEN                 0                       128                                       127.0.0.53%lo:domain                                        0.0.0.0:*                     
LISTEN                 0                       128                                             0.0.0.0:28022                                         0.0.0.0:*                     
LISTEN                 0                       5                                             127.0.0.1:ipp                                           0.0.0.0:*                     
LISTEN                 0                       128                                                [::]:28022                                            [::]:*                     
LISTEN                 0                       5                                                 [::1]:ipp                                              [::]:*    

同時需要設置環境變量$DOCKER_HOST。

$vim ~/.bashrc
export DOCKER_HOST=tcp://localhost:4243

這樣就可以了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM