在Windows 10中启动时Docker桌面崩溃

时间:2020-03-11 07:01:40

标签: docker windows-10 virtualization hypervisor

我通过'Docker Desktop Installer'在Windows 10上安装了Docker桌面。

安装后,我注销并登录。经过一段时间说明如下消息,它在启动时崩溃

Docker.Core.Backend.BackendDestroyException:
One or more errors occurred.
   at Docker.Core.Pipe.NamedPipeClient.<TrySendAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Docker.Core.Pipe.NamedPipeClient.Send(String action, Object[] parameters)
   at Docker.Actions.DoStart(SynchronizationContext syncCtx, Boolean showWelcomeWindow, Boolean withNotifications)
   at Docker.Actions.<>c__DisplayClass26_0.<StartAsync>b__0()
   at Docker.ApiServices.TaskQueuing.TaskQueue.<>c__DisplayClass18_0.<.ctor>b__1()

  System.AggregateException:
  One or more errors occurred.
     at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
     at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
     at Docker.Backend.LifecycleClient.DockerStart()
     at Docker.Backend.ContainerEngine.Linux.DoStart(Settings settings, String daemonOptions, Credential credential)
     at Docker.Backend.ContainerEngine.Linux.Start(Settings settings, String daemonOptions, Credential credential)

     Docker.Core.HttpBadResponseException:
     unable to fetch daemon.json: Get http://unix/engine/daemon.json: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
        at Docker.Backend.HttpClientExtensions.<ParseResponseBodyAsJsonAsync>d__2`1.MoveNext()
     --- End of stack trace from previous location where exception was thrown ---
        at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
        at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
        at Docker.Backend.HttpClientExtensions.<GetJsonAsync>d__0`1.MoveNext()

我已卸载,然后重新启动PC并通过选择“ Windows Container”进行安装。然后在重启后检查正在运行的docker。它成功启动。但是,当我切换到Linux容器时,它再次失败,并显示与上面相同的错误消息。

4 个答案:

答案 0 :(得分:3)

解决这个问题的主要目标是:

  1. 按下窗口的“开始”按钮
  2. 通过键盘“服务”+“回车”输入
  3. 找到其中两个:“Hyper-V 虚拟机管理”和“Hyper-V 主机计算机服务”
  4. (在每个服务上)单击鼠标右键,选择“属性”并在打开的窗口中将“启动类型”更改为“手动”,然后单击“确定”按钮。
  5. 再次单击鼠标右键并选择“开始”
  6. 按windows的“开始”按钮,输入“hyper-v”,它会显示你的超级管理器,打开它
  7. 在 hyper-v 管理器中选择“连接到服务器”,从弹出窗口中选择“本地计算机”
  8. 运行您的桌面 docker,它现在可能正在运行,没有崩溃和异常。

答案 1 :(得分:0)

更新Windows版本似乎可以解决此问题。我遇到了同样的错误,但是在更新Windows之后,Docker的运行就像一个魅力。

答案 2 :(得分:0)

  1. 点击开始按钮 2)然后输入服务 3)搜索Docker桌面服务。 4)点击那个 5) 在左上角点击停止服务,然后点击启动服务。

现在以管理员身份打开 windows powershell 输入码头工人 这将显示命令列表 在那之后输入 docker images 这将显示以下错误

连接时出错:此错误可能表示 docker 守护程序未运行。

然后运行这个命令

& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon

然后运行以下命令

泊坞窗图像

这将解决您的问题

答案 3 :(得分:0)

其他答案中已经给出了帮助,我只是尝试更具体,并通过在路径中使用环境变量来避免一些陷阱,并附加一些细节和核心问题的推理:

首先,请确保“Docker Desktop Service”正在运行,这应该是您在安装或重新启动系统后直接注销并再次登录后的情况。要检查服务状态,请单击/按下/触摸开始按钮/Windows 键以启动集成的桌面搜索并键入:

services

或输入

services.msc

如前所述,在桌面搜索中,或通过按住“Windows 键”和紧随其后的“R”键打开运行对话框,然后松开按键。在“运行对话框”中输入

services.msc

使用带有属性/选项“SwitchDaemon”的命令行界面 (CLI) 工具“DockerCli.exe”。为此,您需要打开命令行,PowerShell 或 CommandShell,您可以通过单击/按下/触摸开始按钮/Windows 键来启动集成桌面搜索并键入:

cmd

对于 CommandShell 或 PowerShell:

powershell

或者您如前所述在桌面搜索中输入“cmd.exe”或“powershell.exe”,或者您

同时按住“Windows 键”和紧随其后的“R 键”打开运行对话框,然后松开按键。在“运行对话框”中输入“cmd.exe”或“powershell.exe”。

要实际切换 Docker-Service 操作模式,请使用以下命令:

如果您在 Command-Shell/cmd.exe 中输入:

cmd -C "%ProgramFiles%\Docker\Docker\DockerCli.exe -SwitchDaemon"

或者如果您使用的是 PowerShell 类型:

& "Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon"

如果这对您来说太复杂了,并且您想尝试“fire&forget”方法 - 依赖于 Docker-Desktop-Service 确实正在运行的假设,因为您要么在安装后注销并重新登录,要么已经重新启动系统,您可以使用运行对话框(通过 Win+R 打开)并粘贴以下行:

powershell.exe & "$Env:ProgramFiles/Docker/Docker/DockerCli.exe -SwitchDaemon"

这会起作用,因为它显式执行 PowerShell(它是 Windows 10 的一部分,Docker 桌面仅在 Windows 10 上运行)并将命令 DockerCli.exe -SwitchDaemon 传递给它。路径是通过 System-Environment- 确定的变量 ProgramFiles 将解析到您的 System-Root 和 Program-Files 目录(在大多数情况下为“C:\Program Files”,但也可以位于手动设置的驱动器号上,例如“B:”(通常用于嵌入式系统以防止自动创建交换文件),在这种情况下为“B:\Program Files”。

它依赖于 Windows 10 系统上 Docker Desktop 的标准安装路径,如果您更改了它,则必须相应地调整路径。你不会有任何反馈。从运行对话框粘贴并执行命令后,只需从开始菜单启动“Docker 桌面”。

所有示例中的路径都用引号("")设置,以保证可以执行。例如,如果您想在桌面上准备一个快捷方式以在部署后首次使用,这也是必要的,例如标题为“运行一次(如果 Docker 桌面无法启动)”。通过这种方式,您可以将其作为预装 Docker 的映像的一部分。

请注意,主要问题是 Docker 使用 WSL2 来提供其基于 Linux 的容器(仅在 Windows 10 Home 上),并且要运行 Windows-Containers Hyper-V 需要启用,遗憾的是后者与 WSL2 在Windows 10 桌面操作系统。之后您可以通过 Windows 10 功能启用 Hyper-V,以及虚拟机服务和 Windows 容器,但不保证它可以与 WSL2 一起使用。