Docker 无法在 Windows 上启动。

451

Windows 上执行 docker version 命令将返回以下结果:

C:\Projects> docker version
Client:
 Version:      1.13.0-dev
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   d8d3314
 Built:        Tue Nov  1 03:05:34 2016
 OS/Arch:      windows/amd64
error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.25/version: open //./pipe/docker_engine: The system cannot find the file
specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.

运行诊断程序会产生以下结果:

C:\Projects> wget https://github.com/Microsoft/Virtualization- 
Documentation/raw/master/windows-server-container-tools/Debug- 
ContainerHost/Debug-ContainerHost.ps1 -UseBasicParsin | iex

Checking for common problems
Describing Windows Version and Prerequisites
 [+] Is Windows 10 Anniversary Update or Windows Server 2016 608ms
 [+] Has KB3192366, KB3194496, or later installed if running Windows build 14393 141ms
 [+] Is not a build with blocking issues 29ms
Describing Docker is installed
 [-] A Docker service is installed - 'Docker' or 'com.Docker.Service'  134ms
   Expected: value to not be empty
   27:         $services | Should Not BeNullOrEmpty
   at <ScriptBlock>, <No file>: line 27
 [+] Service is running 127ms
 [+] Docker.exe is in path 2.14s
Describing User has permissions to use Docker daemon
 [+] docker.exe should not return access denied 42ms
Describing Windows container settings are correct
 [-] Do not have DisableVSmbOplock set to 1 53ms
   Expected: {0}
   But was:  {1}
   66:              $regvalue.VSmbDisableOplocks | Should Be 0
   at <ScriptBlock>, <No file>: line 66
 [+] Do not have zz values set 42ms
Describing The right container base images are installed
error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.25/images/json: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.
 [-] At least one of 'microsoft/windowsservercore' or 'microsoft/nanoserver' should be installed 129ms
   ValidationMetadataException: The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
   ParameterBindingValidationException: Cannot validate argument on parameter 'Property'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
   at <ScriptBlock>, <No file>: line 90
Describing Container network is created
 [-] Error occurred in Describe block 1.08s
   RuntimeException: Cannot index into a null array.
   at <ScriptBlock>, <No file>: line 119
Showing output from: docker info

Showing output from: docker version
Client:
 Version:      1.13.0-dev
 API version:  1.25
 Go version:   go1.7.3
 Git commit:   d8d3314
 Built:        Tue Nov  1 03:05:34 2016
 OS/Arch:      windows/amd64

Showing output from: docker network ls

Warnings & errors from the last 24 hours
Logs saved to C:\Projects\logs_20161107-084122.csv
C:\Projects>

32
我得出结论,Windows 上的技术还不够成熟。在技术成熟之前,请使用 Linux Docker。 - Jim
使用此命令 docker-machine create box。请参考 https://github.com/docker/toolbox/issues/636。 - Mr Nobody
请确保您已经按照文档 https://docs.docker.com/machine/get-started/ 中的设置步骤进行了操作。 - fanny
有时在初始安装时会出现这种情况,但只需完成勾选接受服务级别协议的程序即可。通常,在电脑上搜索Docker桌面并单击其图标即可。 - Gilbert
1
同样适用于2021年:在问题中提到的诊断脚本的更新URL是 wget https://github.com/Microsoft/Virtualization-Documentation/raw/main/windows-server-container-tools/Debug-ContainerHost/Debug-ContainerHost.ps1 -UseBasicParsin | iex - Ben Seymour
显示剩余3条评论
61个回答

666

错误与此部分相关:

在Windows上的默认守护程序配置中,docker客户端必须以提升权限运行才能连接

  • 首先,请确认 Docker Desktop 应用正在运行。如果没有,请启动它:这将运行docker守护程序(只需等待几分钟)。

  • 然后,如果错误仍然存在,您可以尝试切换Docker守护程序类型,如下所述:

使用 Powershell:

  1. 以管理员身份打开 Powershell
  2. 运行命令:& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon

或者,使用 cmd:

  1. 以管理员身份打开 cmd
  2. 运行命令:"C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchDaemon

109
非常感谢您!我非常喜欢 Stack Overflow。 :) - kamil wilk
6
这应该是被接受的答案,因为它解决了在使用Visual Studio在Docker上运行解决方案的问题。 - Hilal
4
请以管理员权限打开Docker桌面版。 - abhijat_saxena
32
对我没有用,还是出现相同的错误。 - Luis Alfredo Serrano Díaz
7
对于那些无法正常运行的人,请尝试删除位于%appdata%\Docker文件夹下的文件(按Ctrl+R,粘贴“%appdata%\Docker”,然后按Enter),如Github问题所示。 - Karobwe
显示剩余15条评论

145

启动Docker守护程序解决了问题。只需按下Windows键并单击“Docker Desktop”以搜索Docker。守护程序应在一分钟内运行。 enter image description here

启动Docker Desktop后,请确保底部左侧的Docker守护程序状态为绿色,并在悬停时显示“RUNNING”。


8
从2021年开始,谢谢。许多其他答案就像是来自Docker仍处于测试版时代的过去时代。 - eric
10
这个方法管用!!! 我试图从PowerShell运行Docker,但它一直报错:“连接期间出错:该错误可能表示Docker守护程序没有运行。: 获取"http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/images/json":打开//./pipe/docker_engine时系统找不到指定的文件。”但是当我打开Docker桌面并启动Docker引擎后...问题就解决了! :) - Divinity
甚至无法打开,哈哈。我收到“Docker初始化失败”的消息,然后它就关闭了。https://www.youtube.com/watch?v=VX5rjTramis&ab_channel=jeffc - Anshuman Kumar
无法打开,哈哈。我收到“Docker初始化失败”的消息,然后就关闭了。https://www.youtube.com/watch?v=VX5rjTramis&ab_channel=jeffc - undefined
这个方法可以,但是有没有办法在不运行Docker桌面的情况下启动守护进程?Docker桌面只是一个应用程序,不是守护进程。 - undefined

83

您可以运行"C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchDaemon,并将Docker CLI指向Linux或Windows容器。我用这种方法解决了问题。


5
这对我有用 - Win10E - Docker 版本 18.03.0-ce,构建 0520e24(使用 Linux 虚拟机 - Hyper-V,启用虚拟化技术 - 这阻止了我在 VirtualBox 中运行虚拟机 - 因此我一次只能使用 Docker 或虚拟机)。 - hB0
这在Windows Home中不起作用,因为它们只能运行WSL2守护程序,因此切换守护程序是毫无意义的。 - Juan Vilar
1
非常好用!适用于我的电脑,我使用的是Win10企业版。 - Angad Bansode

50

错误代码:

连接期间出错:获取 http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.29/version时出错:打开 //./pipe/docker_engine:系统找不到指定的文件。在Windows上的默认守护程序配置中,必须以管理员身份运行docker客户端才能连接。此错误还可能表示docker守护程序未运行。

解决方案:

1)对于Windows 7命令窗口(cmd.exe),使用管理员身份打开cmd.exe并执行以下命令:

docker-machine env --shell cmd default

您将收到以下输出:

SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\USER_NAME\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM @FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO @%i

复制下面的命令,然后在命令提示符中执行:

@FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO @%i

然后执行以下命令来控制:

docker version

2) 对于Windows 7 Powershell,请以管理员身份运行powershell.exe并执行以下命令:

docker-machine env --shell=powershell | Invoke-Expression

然后执行以下命令来控制:

docker version

3) 如果您重新打开cmd或powershell,则应再次重复相关步骤。


14
请解释!Powershell 方法是最容易跟随的,但为什么会出现这个问题,一个单行脚本为什么可以解决它? 为什么会出现这个问题和为什么一个单行脚本可以解决它,需要更多的背景信息才能做出详细解释。不过,Powershell 方法是最容易跟随的这句话已经很清楚了。 - Jaywalker
2
如果步骤1和步骤2是互斥的,为什么它们被标号为1和2? - sean
20
Windows 10企业版怎么样?Docker机器“default”不存在。使用“docker-machine ls”列出机器。 使用“docker-machine create”添加一个新的机器。 - Chloe
5
当我尝试运行第一条命令时,出现了以下提示: docker-machine : 无法识别'the term 'docker-machine'为cmdlet、函数、脚本文件或可执行程序的名称。请检查拼写,或者如果包含路径,请确认路径是否正确,然后重试。 - Thesonter

31
如果您在左下角看到Docker桌面已停止或未运行屏幕,则执行以下操作:
  1. 使用管理员身份运行PowerShell
  2. 如果Docker桌面已打开,请关闭它
  3. 在PowerShell上执行以下命令:“& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon”
  4. 打开Docker桌面,它将启动。

1
请问你能告诉我这个命令是做什么的吗?之前它对我来说是有效的。但现在构建需要超过10分钟才能完成。以前最多只需要1到2分钟。 - Dattatreya Kugve

14

我知道这个问题很久以前就有人问了,但我没有找到适当的解释和解决方案,所以希望我的答案有用 :)

假设您在Windows上安装了Docker Toolbox,则会同时提供dockerdocker-machine命令。通常,人们会困惑何时使用其中任何一个。

docker命令仅在虚拟机中用于管理镜像。而docker-machine命令用于主机上管理Linux虚拟机。

因此,请在您的Windows机器上使用docker-machine命令。在虚拟机内使用docker命令。例如,要使用docker psdocker命令,您可以打开Docker Quickstart Terminal或在cmd/bash/PowerShell中运行以下命令:

docker-machine run default / 假设default是您的Linux虚拟机/

docker-machine ssh default

这将启动boot2docker,您将看到命令行中的docker图标。然后您就可以使用docker命令了。

祝好运 :)


5
docker-machine: 'run' 不是 docker-machine 命令。请参阅 'docker-machine --help'。 这与文档不符。文档说您可以运行 docker infodocker ps 来查看容器。 https://docs.docker.com/get-started/#test-docker-version - Chloe

10

1.- 打开快捷方式的位置:

shorcut

2.- 右键单击属性,并在目标中添加“-SwitchDaemon”

enter image description here

3.- 授予管理员权限,选择高级选项:

enter image description here

4.- 重新启动Windows。


9
在 Windows 11 上,对于我使用的 WSL2(而不是 Hyper-V),编辑 %APPDATA%\Docker\settings.json 文件将以下值设置后重启 Docker Desktop 即可解决问题:

enter image description here


8
我安装 Docker Desktop 4.7.1 并使用 WSL 2 后,在终端遇到了同样的问题。托盘鲸鱼图标也没有显示出来。
我的情况是在安装 Docker Desktop 前已经安装了 WSL 发行版(Ubuntu),并且它一直是默认的。使用 WSL 2 的 Docker Desktop 安装其自己的发行版,称为 docker-desktop。而且它必须是默认的(至少如果未在其他地方配置)。
所以我必须在 PowerShell 中运行此命令:wsl --setdefault docker-desktop,然后重新启动 Docker 服务。在这里找到了解决方案。

7

我在运行Docker版本19.03.12Windows 10时遇到了相同的错误。通过以下步骤解决了这个问题,希望对其他人有所帮助。

  1. 前往Windows开始菜单 -> 搜索框(在此处键入以搜索)。在搜索框中输入'Services',然后在列出的项目中单击Services应用程序
  2. 现在在打开的服务窗口中搜索“Docker Desktop Service”。右键单击它并启动该服务。它的状态应更改为“正在运行”。
  3. 如果第2步出现错误,如“依赖项服务无法启动”,则启动所有相关的服务。我必须启动一个名为“Server”的服务。
  4. 在桌面上双击Docker Desktop图标。现在您将在系统托盘中看到“Docker Desktop正在运行”。
  5. 现在从命令提示符PowerShell中运行“docker version”命令。它应该会提供干净的输出结果。
  6. 如果第5步出现任何问题,请以管理员身份运行命令提示符PowerShell

以上解决方案假定 Docker 已安装,而且您的系统已启用Hyper-V/虚拟化功能。


Powershell 会使用 "Docker Desktop Service" | Get-Service,但不幸的是它正在运行,这个答案并没有解决 Docker 命令失败的问题。 - AUSTX_RJL
@AUSTX_RJL,如果您看到其他回答也没有解决Docker命令失败的问题。因为问题是“Docker无法在Windows上启动”,而不是询问如何在命令中执行。因此,我们可以通过命令或UI解决。请重新验证您的投票。 - RLD

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