【问题标题】:docker.errors.DockerException: Error while fetching server API versiondocker.errors.DockerException:获取服务器 API 版本时出错
【发布时间】:2021-03-05 05:07:02
【问题描述】:

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

我多次尝试更新docker版本并重启docker...但是没有成功。

git clone https://github.com/uhh-lt/158.git
cd 158
docker-compose build
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'))

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?

【问题讨论】:

  • 确保 docker 桌面已启动。在我的情况下,我得到了 docker.errors.DockerException: Error while fetching server API version: (2, 'CreateFile', 'The system cannot find the file specified.') 因为我手动停止了 docker 桌面。一旦我重新启动它,一切都按预期工作。
  • @mafei 在我的情况下成功了!谢谢! :)

标签: python linux docker docker-compose


【解决方案1】:

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

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

这将有助于了解您使用的是什么操作系统和docker version

【讨论】:

  • 感谢您的帮助!!我使用的是 ubuntu,docker 版本是 19.03.13。我尝试使用“systemctl start docker”来启动,但出现了问题,所以我尝试了“sudo /etc/init.d/docker start”。也没有用...
  • 我明白了。听起来有点像 WSL……请尝试“sudo service docker start”,看看它是否有效。如果它是 WSL,您是否尝试以管理员身份启动它(通过右键单击开始菜单)?
  • "sudo service docker start" 不起作用,所以我打开了 windows powershell(管理员),运行 "docker-compose build" 并发生了另一个错误'/usr/bin/env: 'python3 \r':没有这样的文件或目录错误:服务'前端'未能构建:命令'/bin/sh -c ./frontend_assets.py'返回非零代码:127'
  • 看来我必须在ubuntu中安装dos2unix...所以我支持ubuntu,尝试将powershell安装到ubuntu中...安装powershell和dos2unix后,运行'docker version'仍然无法连接..error:'无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程。 docker 守护进程是否正在运行?'
  • 是的,直到 docker 守护进程没有启动(“sudo service docker start”应该这样做),套接字文件不存在并且 docker 和 compose 无法连接到守护进程。您应该做的第一件事是找出 docker daemon 不启动的原因。请尝试按照此处的信息进行操作(包括尝试手动运行 dockerd 并查看同一页面上的故障排除指南):docs.docker.com/config/daemon
【解决方案2】:

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

sudo usermod -aG docker ${USER}

要应用新的组成员资格,请退出服务器并重新登录,或键入以下内容:

su - ${USER}

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

【讨论】:

  • 这是正确的解决方案!
【解决方案3】:

在 Linux(至少 Ubuntu 18.04.x)中,您有时需要注销并重新登录您的 X 用户会话。退出 bash 或退出终端窗口并重新登录是不够的,例如参见 https://askubuntu.com/questions/1161020/groups-and-groups-user-show-different-groups-dialout-is-missing

【讨论】:

    【解决方案4】:

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

    srw-rw----. 1 root docker 0 Oct  4 18:04 /var/run/docker.sock
    

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

    sudo usermod -a -G docker $(whoami)

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        当我尝试运行docker-compose 并且 docker 桌面已关闭时,我也会收到此错误,我认为这是 docker-compose 中的错误,它没有通知用户问题是因为 docker 服务是下,与抛出正确错误的 docker cli 相同:

        C:\Users\x\IdeaProjects\mongo-exmple>docker pull node
        Using default tag: latest
        error during connect: This error may indicate that the docker daemon is not running.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/images/create?fromImage=node&tag=latest": open //./pipe/docker_engine: The system cannot find 
        the file specified.
        

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题,但我在运行 docker server 时设法解决了。

          【讨论】:

            【解决方案8】:

            这样设置权限,

            sudo chmod 666 /var/run/docker.sock
            

            【讨论】:

            • 为我工作!我最初检查“systemctl status docker”以查看 docker 是否正在运行——它是。我转向这个答案,效果很好。谢谢!
            • 小心!任何可以访问 Docker 套接字的人都可以轻松地 root 主机。这个设置在开发者系统上是有意义的,在开发者系统中,你无论如何都给自己不受限制的sudo 访问权限,但在其他情况下它可能不是一个好的安全实践。
            【解决方案9】:

            sudo service docker start
            sudo service docker restart

            【讨论】:

            • 这对我有用,我在 WSL2 上运行 ubuntu。
            • 这对我有用,我在 Centos 上运行 ubuntu
            【解决方案10】:

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

            我是这样解决的:

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

            【讨论】:

              【解决方案11】:

              在 Windows 中,从 Docker 退出并再次运行它有时会有所帮助。显然 docker 并不总是能正常启动。

              【讨论】:

              • 对我来说,这与启用的企业 VPN 有关。我禁用了它,然后docker成功启动了....
              【解决方案12】:

              使用WSL (Windows Subsystem for Linux) 时,需要在Windows Docker Desktop 中为所需发行版启用“WSL 集成”(设置 -> 资源-> WSL 集成 -> 启用与所需发行版的集成)。

              【讨论】:

              • 其实我已经设置了这个选项,但是我把它关掉了,重新加载 docker,然后打开它并重新加载 docker,它就成功了。
              • 确保以管理员开头
              猜你喜欢
              • 2023-02-05
              • 2019-05-20
              • 1970-01-01
              • 2022-07-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-02-16
              相关资源
              最近更新 更多