Docker:无法连接到unix:///var/run/docker.sock处的Docker守护进程。Docker守护进程是否正在运行?

27

我通过 Visual Studio Code (VSCode,版本1.66)远程连接到学校服务器(Ubuntu 20.04.2 LTS),执行一些任务。今天,我按照 docker.com 的步骤 (https://docs.docker.com/engine/install/ubuntu/) 在 Ubuntu 上安装了 Docker 引擎。

当我完成所有步骤后运行 sudo docker run hello-world 来验证 Docker 引擎是否正确安装并运行 hello-world 镜像时,出现了以下错误:

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

接下来我检查了 docker version,它显示

Client: Docker Engine - Community
 Version: 20.10.14
 API version: 1.41
 Go version: go1.16.15
 Git commit: a224086
 Built: Thu Mar 24 01:48:02 2022
 OS/Arch: linux/amd64
 Context: default
 Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

接下来查看 sudo docker info,它显示了

Client:
 Context: default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.1-docker)
  scan: Docker Scan (Docker Inc., v0.17.0)

Server:
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
errors pretty printing info

我按照这个教程卸载并重新安装了docker,但仍然显示出错,我觉得需要按照docker的服务器端进行操作,但我不知道该怎么做?

这是历史记录:

root@yp:~# sudo apt-get remove docker docker-engine docker.io containerd runc
...
root@yp:~# sudo apt-get update
...
root@yp:~# sudo apt-get install \
>     ca-certificates \
>     curl \
>     gnupg \
>     lsb-release
...
root@yp:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
...
root@yp:~# echo \
>   "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
>   $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
...
root@yp:~# sudo apt-get update
...
root@yp:~# sudo apt-get install docker-ce docker-ce-cli containerd.io
...
root@yp:~# sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
6个回答

23

你应该首先在systemctl中启动和启用Docker。

 systemctl start docker
 systemctl enable docker

3
谢谢您的回复。我尝试了,但发现:root@yp:~# systemctl start docker System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down - Yang
7
@Yang,你是在你的电脑上安装了Ubuntu还是使用虚拟机或WSL呢? 尝试这个命令:sudo service docker start - SobhanRM
5
我尝试执行 root@yp:~# sudo service docker start * Starting Docker: docker,但是它没有起作用。 - Yang
请在Discord上联系我,这样我就可以帮助你解决问题。TheGreatBirm#9222 - SobhanRM
4
我正在使用Mac电脑,出现了“zsh: command not found: systemctl”错误。 - AnonymousUser
显示剩余3条评论

11

我刚解决了一个类似的问题

首先,你需要在电脑上安装Docker Desktop,你可以从这里获取: https://docs.docker.com/desktop/windows/wsl/

你还应该启用wsl2,请参考上述链接中的文档。

确保你进入“设置”>“资源”>“WSL Integration”,并启用Ubuntu-20.04或任何其他你正在使用的发行版。

同时,确保“设置”>“常规”>选中“使用基于WSL 2的引擎…”。


5
请注意Docker Desktop的新许可条款,这使得它对许多人来说不再是一个选择。 - Morten Grøtan

6

我尝试使用usermod修改权限,但在Linux上仍然遇到相同的错误。经过查找目录和文件,我发现docker应该连接软链接到docker.sock文件,但是出现了某种故障。

ls -l /home/USERNAME/.docker/desktop

检查符号链接 docker.sock 是否存在于 /var/run/docker.sock

如果符号链接不存在,我们将创建一个。

  1. 首先备份原始的 docker.sock 文件。
mv /home/USERNAME/.docker/desktop/docker.sock /home/USERNAME/.docker/desktop/docker.sock.bak
  • 创建符号链接
  • sudo ln -sv /var/run/docker.sock /home/USERNAME/.docker/desktop/docker.sock
    

    你必须将输出看作是:
    '/home/USERNAME/.docker/desktop/docker.sock' -> '/var/run/docker.sock'
    再次运行 'docker run hello-world',现在可能会正常工作。
    附言:我注意到同一目录中还有其他文件,它们不是符号链接。如果遇到任何错误,我会再次尝试为其他文件创建符号链接。

    各位朋友,对于其他人在将您的用户添加到组后遇到“找不到.sock”错误的情况,这个方法在2023年帮助我解决了这个问题。 - undefined

    4

    对于从搜索引擎来到这里的Linux用户,也可以尝试以下方法:

    • 以非sudo方式运行docker命令(这就是无根模式的工作方式)
    • 将您的用户账户添加到docker组中 sudo usermod -aG docker $USER 1

    3
    Mac用户应使用launchctl命令-
    sudo launchctl start docker
    sudo launchctl enable docker
    

    0
    我刚遇到了你在这里描述的同样问题: “错误:无法连接到位于unix:///var/run/docker.sock的Docker守护程序。Docker守护程序是否正在运行?”
    我在本地的Linux上使用WSL2运行Docker桌面,对我来说解决方案是:
    • 进入任务管理器
    • 通过选择每个活动的Docker桌面进程并点击“结束任务”来终止所有活动进程(有几个正在尝试启动)
    • 启动Docker桌面
    • 然后会自动下载和安装更新(我不知道是否是这个导致了Docker启动失败)
    • 然后Docker正常启动
    祝好运!

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接