docker.errors.DockerException:获取服务器 API 版本时出错

min*_*ing 66 python linux docker docker-compose

我想安装这个模块,但是当我尝试这个步骤时出了点问题 docker-compose build ...

我多次尝试更新docker版本并重新启动docker......但它没有用。

git clone https://github.com/uhh-lt/158.git
cd 158
docker-compose build
Run Code Online (Sandbox Code Playgroud)
File "/home/ming/.local/bin/docker-compose", line 8, in <module>
    sys.exit(main())
  File "/home/ming/.local/lib/python3.8/site-packages/compose/cli/main.py", line 67, in main
    command()
  File "/home/ming/.local/lib/python3.8/site-packages/compose/cli/main.py", line 123, in perform_command
    project = project_from_options('.', options)
  File "/home/ming/.local/lib/python3.8/site-packages/compose/cli/command.py", line 60, in project_from_options
    return get_project(
  File "/home/ming/.local/lib/python3.8/site-packages/compose/cli/command.py", line 131, in get_project
    client = get_client(
  File "/home/ming/.local/lib/python3.8/site-packages/compose/cli/docker_client.py", line 41, in get_client
    client = docker_client(
  File "/home/ming/.local/lib/python3.8/site-packages/compose/cli/docker_client.py", line 170, in docker_client
    client = APIClient(**kwargs)
  File "/home/ming/.local/lib/python3.8/site-packages/docker/api/client.py", line 188, in __init__
    self._version = self._retrieve_server_version()
  File "/home/ming/.local/lib/python3.8/site-packages/docker/api/client.py", line 212, in _retrieve_server_version
    raise DockerException(
docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))
Run Code Online (Sandbox Code Playgroud)

2020.11.23

感谢你们两个帮助我解决错误!我尝试了推荐但无法连接到我的 docker...

ming@KITM-7664:~$ sudo /etc/init.d/docker start
[sudo] password for ming:
 * Starting Docker: docker                                                                                       [ OK ]
ming@KITM-7664:~$ which docker
/usr/bin/docker
ming@KITM-7664:~$ docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:52 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
ming@KITM-7664:~$ systemctl status docker
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
ming@KITM-7664:~$ 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
ming@KITM-7664:~$ sudo /etc/init.d/docker start
 * Starting Docker: docker                                                                                       [ OK ]
ming@KITM-7664:~$ docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:52 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Run Code Online (Sandbox Code Playgroud)

Dan*_* N. 147

您确定 docker 正在您的系统上运行吗?当 compose 无法通过 docker 套接字连接到 docker 时,您可能会收到该错误(如果未定义任何其他连接方式)。

如果你在 linux 上运行,通常你可以运行“systemctl status docker”来检查 docker daemon 是否正在运行,然后“systemctl start docker”来启动它。

这将有助于告诉您使用的是什么操作系统和 docker 版本。

  • 我明白。听起来有点像 WSL...请尝试“sudo service docker start”并查看它是否正常工作。这是 WSL 的情况,您是否尝试以管理员身份启动它(通过在开始菜单中右键单击)? (3认同)

小智 35

默认情况下,docker命令只能由root用户或docker组中的用户运行,该组是在Docker\xe2\x80\x99s安装过程中自动创建的。如果您想避免在运行 docker 命令时键入 sudo,请将您的用户名添加到 docker 组:

\n
sudo usermod -aG docker ${USER}\n
Run Code Online (Sandbox Code Playgroud)\n

要应用新的组成员身份,请注销服务器并重新登录,或键入以下内容:

\n
su - ${USER}\n
Run Code Online (Sandbox Code Playgroud)\n

系统将提示您输入用户\xe2\x80\x99s 密码以继续。

\n

  • 这个解决方案实际上对我有帮助,并且似乎比在 docker.sock 上设置 666 权限更安全 (6认同)

vla*_*mir 19

当使用WSL(Linux 的 Windows 子系统)时,需要为Windows Docker 桌面中的所需发行版启用“WSL 集成” (设置 -> 资源 -> WSL 集成 -> 启用与所需发行版的集成)。

WSL 集成

  • 实际上我已经设置了这个选项,但是我将其关闭,重新加载 docker,然后打开它并重新加载 docker,它对我有用。 (2认同)
  • 确保以管理员身份启动 (2认同)

小智 18

sudo service docker start 或者
sudo service docker restart


Maf*_*fei 14

像这样设置权限,

sudo chmod 666 /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

  • 当心!任何可以访问 Docker 套接字的人都可以轻松地 root 主机。此设置在开发人员系统上是有意义的,您无论如何都可以为自己提供不受限制的“sudo”访问权限,但在其他情况下可能不是良好的安全实践。 (6认同)
  • 不好的建议,被否决。套接字文件将有一个组——通常是“docker”。如果您想访问套接字,您应该将自己添加到该组(将您的用户名添加到“/etc/group”中的组,注销,再次登录)。像这样向机器的“所有”用户开放它是不好的做法,原因@DavidMaze 已经指出了。 (6认同)
  • 这是更安全的第一次尝试 /sf/answers/4827816661/ (2认同)

flo*_*olu 14

我在开始时遇到了这个问题docker-compose。该问题是由“urllib3”引起的。修复方法很简单:

pip install 'urllib3<2'
Run Code Online (Sandbox Code Playgroud)

来源:https ://github.com/docker/docker-py/issues/3113#issuecomment-1579172104


Erw*_*wol 7

在将 Windows Docker 桌面更新到最新版本 ( 20.10.2, build 2291f61)后,刚刚遇到了同样的问题。碰巧这个更新禁用了 WSL2 与我用来运行大多数项目的虚拟 Ubuntu 18.04 的集成。

我是这样解决的:

  1. 打开 Docker 桌面
  2. 转到设置 > 资源 > WSL 集成
  3. 确保您的发行版已启用
  4. 重启 Docker
  5. 无需重新启动 WSL2,docker 应该可以再次工作

Docker 桌面发行版集成


ste*_*ddy 6

我遇到了类似的问题,结果是由于 Docker 服务器未运行。我启动了该应用程序,然后运行docker-compose up,它开始正常工作。希望它对遇到类似情况的人有所帮助。:-)


Xen*_*ier 6

您无权使用 docker 套接字,默认情况下只有docker组可以访问它。您可以使用 来验证这一点ls -l /var/run/docker.sock,它将打印如下内容:

srw-rw----. 1 root docker 0 Oct  4 18:04 /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

为了能够访问套接字并使用 Docker,请使用以下命令将自己添加到 Docker 组:

sudo usermod -a -G docker $(whoami)

然后注销并重新登录。Docker 现在可以工作了。


小智 5

确保选中“使用 Docker Compose V2”复选框。它为我解决了。 码头工人桌面


小智 5

在装有 Docker Desktop 4.18 的 macOS 中,签Enable default docker socketSettings -> Advanced部分。