Ubuntu中Docker報(bào)錯(cuò)“Cannot?connect?to?the?Docker?daemon?at?unix:///var/run/docker.sock”錯(cuò)誤解決辦法
發(fā)現(xiàn)問(wèn)題
在 Ubuntu 上運(yùn)行 Docker 時(shí),很多人都會(huì)遇到下面這個(gè)經(jīng)典錯(cuò)誤:
docker run hello-world
輸出如下:
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? Run 'docker run --help' for more information
一、問(wèn)題現(xiàn)象
即使執(zhí)行了:
sudo systemctl start docker sudo systemctl status docker
看到輸出中顯示:
Active: active (running)
但是執(zhí)行任何 docker run 命令仍然報(bào)錯(cuò):
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
并且查看 socket 文件:
ls -l /var/run/docker.sock
結(jié)果是:
ls: 無(wú)法訪問(wèn) '/var/run/docker.sock': 沒(méi)有那個(gè)文件或目錄
二、問(wèn)題原因分析
Docker 客戶端(docker 命令)是通過(guò) **Unix Socket 文件 **/var/run/docker.sock 與后臺(tái)服務(wù) dockerd 通信的。
如果
/var/run/docker.sock不存在,客戶端就無(wú)法與守護(hù)進(jìn)程通信。這通常意味著 Docker 守護(hù)進(jìn)程(dockerd)沒(méi)有正確通過(guò) systemd socket 激活。
在正常情況下,Docker 啟動(dòng)邏輯如下:
systemd → docker.socket (監(jiān)聽(tīng) /run/docker.sock)
? 激活 docker.service (啟動(dòng) dockerd)
? 接管 /run/docker.sock然而,當(dāng)系統(tǒng)中存在以下情況時(shí),Socket 文件就無(wú)法生成:
dockerd沒(méi)有被 systemd 通過(guò) socket 激活;/run/docker.sock被殘留文件占用;Docker 啟動(dòng)順序出錯(cuò)(socket 先啟動(dòng)但 daemon 沒(méi)接管);
/var/run未正確鏈接到/run;用戶未加入
docker用戶組。
三、完整解決步驟
以下步驟在 Ubuntu 20.04+、22.04+ 上驗(yàn)證有效。
停止所有與 Docker 相關(guān)的進(jìn)程
sudo systemctl stop docker sudo systemctl stop docker.socket sudo pkill dockerd
確保全部停止:
ps -ef | grep dockerd
若仍有進(jìn)程殘留,手動(dòng) sudo kill -9 PID。
清理舊的 socket 文件
sudo rm -f /run/docker.sock sudo rm -f /var/run/docker.sock
檢查 /var/run 是否是指向 /run 的符號(hào)鏈接:
ls -ld /var/run
應(yīng)當(dāng)顯示:
lrwxrwxrwx 1 root root 4 ... /var/run -> /run
? 如果不是,請(qǐng)修復(fù):
sudo ln -sf /run /var/run
重新加載 systemd 并啟動(dòng)服務(wù)
sudo systemctl daemon-reload sudo systemctl start docker.socket sudo systemctl start docker
檢查 docker socket 是否生成
ls -l /run/docker.sock
正常情況下會(huì)看到:
srw-rw---- 1 root docker 0 11月 4 09:30 /run/docker.sock
說(shuō)明 socket 已成功被 dockerd 接管。
測(cè)試運(yùn)行 Hello World
sudo docker run hello-world
輸出類(lèi)似:
Hello from Docker! This message shows that your installation appears to be working correctly.
? 成功!
總結(jié)
到此這篇關(guān)于Ubuntu中Docker報(bào)錯(cuò)“Cannot connect to the Docker daemon at unix:///var/run/docker.sock”錯(cuò)誤解決辦法的文章就介紹到這了,更多相關(guān)Docker報(bào)錯(cuò)Cannot connect to the Docker daemon at unix內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解在Docker容器中運(yùn)行Spring Boot應(yīng)用
本文將以一個(gè)最簡(jiǎn)單的Spring Boot開(kāi)發(fā)的Web應(yīng)用為例,講解如何將其容器化運(yùn)行。本文的重點(diǎn)是構(gòu)建Docker鏡像、運(yùn)行Docker容器。2017-06-06
docker-compose部署nacos 2.2.3的詳細(xì)過(guò)程
這篇文章主要介紹了docker-compose部署nacos 2.2.3的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11
Docker網(wǎng)絡(luò)原理及自定義網(wǎng)絡(luò)詳細(xì)解析
一般使用自定義網(wǎng)絡(luò),自定義網(wǎng)絡(luò)使用network創(chuàng)建,創(chuàng)建時(shí)可以指定子網(wǎng)網(wǎng)段及網(wǎng)關(guān)等信息,在創(chuàng)建并啟動(dòng)容器時(shí)指定使用的網(wǎng)絡(luò),今天通過(guò)本文給大家介紹Docker網(wǎng)絡(luò)原理及自定義網(wǎng)絡(luò)的相關(guān)知識(shí),感興趣的朋友一起看看吧2021-05-05
Docker buildx構(gòu)建多平臺(tái)鏡像并推送到私有倉(cāng)庫(kù)的方法
這篇文章主要介紹了Docker buildx構(gòu)建多平臺(tái)鏡像并推送到私有倉(cāng)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
如何使用?docker?搭建一個(gè)?mysql?服務(wù)
這篇文章主要介紹了如何使用?docker?搭建一個(gè)mysql服務(wù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
分享Ubuntu19無(wú)法安裝docker源問(wèn)題
這篇文章主要介紹了Ubuntu19無(wú)法安裝docker源問(wèn)題,本文通過(guò)實(shí)例代碼給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11

