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

j2cgzkjk  于 2023-01-20  发布在  Docker
关注(0)|答案(7)|浏览(584)

我通过“Docker桌面安装程序”在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()

我卸载,重新启动我的电脑,并通过选择“Windows容器”安装。然后在重新启动后检查运行docker。它成功启动。但当我切换到Linux容器,它再次失败,并显示上述相同的错误信息。

4dbbbstv

4dbbbstv1#

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

vatpfxk5

vatpfxk52#

什么帮助已经在其他答案中给出,我只是试图更具体,并试图通过在路径中使用环境变量避免一些陷阱,并附加一些细节和核心问题的推理:
首先,请确保"Docker桌面服务"正在运行,这应该是您在安装或重新启动系统后直接注销并再次登录的情况。要检查服务的状态,请单击/按下/触摸开始按钮/Windows键以启动集成桌面搜索并键入:

services

或类型

services.msc

如前所述,在桌面搜索中,或通过按住"Windows键"和其后的"R"键打开运行对话框,然后释放这些键。在"运行对话框"中键入

services.msc

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

cmd

对于命令 shell 程序或PowerShell:

powershell

或者您在前面提到的桌面搜索中键入"cmd.exe"或"powershell.exe",或者您
按下并按住"Windows键"和"R键"打开运行对话框,然后松开键。在"运行对话框"中键入"cmd.exe"或"powershell.exe"。
要实际切换坞站服务操作模式,请使用以下命令:
如果您在Command-Shell/cmd.exe中,请键入:

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

或者,如果您使用PowerShell,请键入:

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

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

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

这将工作,因为它显式执行PowerShell(这是Windows 10的一部分和Docker桌面只运行在Windows 10上),并传递给它命令DockerCli.exe-SwitchDaemon.路径是通过系统环境变量ProgramFiles确定的,它将解析到您的系统根和Program-Files目录(在大多数情况下"C:\Program Files",但也可以在手动设置的驱动器号,如"B:"(这通常用于嵌入式系统,以防止自动创建交换文件),所以在这种情况下"B:\Program Files"。
它依赖于Docker Desktop在Windows 10系统上的标准安装路径,如果您更改了它,则必须相应地调整路径。您将不会收到任何反馈。只需在从运行对话框粘贴并执行命令后,从开始菜单启动"Docker Desktop"即可。
所有示例中的路径都设置在引号("")中,以保证可以执行该路径。例如,如果您希望在桌面上准备一个快捷方式以供部署后首次使用,例如,标题为"Run this once(if Docker Desktop failed to start)",这也是必要的。这样,您可以使其成为预装Docker的映像的一部分。
请注意,主要的问题是Docker使用WSL2来提供其基于Linux的容器(仅限Windows 10家庭版),并且要运行Windows容器,需要启用Hyper-V,遗憾的是,后者与Windows 10桌面操作系统上的WSL2相矛盾。您可以在之后启用Hyper-V,以及通过Windows 10功能启用虚拟机服务和Windows容器,但不能保证它能与WSL2一起工作。

gpfsuwkq

gpfsuwkq3#

1.点击开始按钮
1.然后键入服务
1.搜索 *Docker桌面服务 *。
1.点击那个
1.在左上方单击 * 停止服务 *
1.然后单击“启动服务”。
现在以管理员身份打开windows powershell
docker
这将显示命令列表
然后键入docker images
这将显示以下错误
连接期间出错:此错误可能表示Docker守护程序未运行。
然后运行以下命令
& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon
然后运行以下命令
docker images
这会解决你的问题

vbopmzt1

vbopmzt14#

对我来说,解决方案是在电脑BIOS中启用CPU虚拟化。Docker依靠虚拟化来让容器工作。对我来说,当它被禁用时,Docker Desktop不断崩溃和重启,给我的信息非常少。
下面是一个有用的页面,其中包含有关如何启用虚拟化的一些详细信息:https://bce.berkeley.edu/enabling-virtualization-in-your-pc-bios.html
简短说明如下:
1.重新启动计算机。
1.按DEL或F2或任何它是为您的计算机进入BIOS。
1.查找CPU设置,然后找到名为VT-x、AMD-V、SVM或Vanderpool的设置。启用它。
1.保存设置并重新启动计算机。

ddarikpa

ddarikpa5#

你应该打开Hyper-V部分。Docker没有Hyper-V就无法工作。
如何打开Hyper-V部分:
1.右键单击Windows按钮并选择“应用程序和功能”。
1.选择右侧相关设置下的程序和功能。
1.选择打开或关闭Windows功能。选择Hyper-V并单击确定。

hs1rzwqc

hs1rzwqc6#

修复非常简单...

如果您使用的是Docker Desktop for Windows,请转到Windows屏幕右下角的 * 系统托盘 *,右键单击Docker * 鲸鱼图标 *,然后在Docker设置弹出窗口中选择切换到Windows容器...

除非您安装并运行Linux容器主机VM(如在HyperVisor下运行的Moby VM),并且安装并运行Docker守护程序及其所有依赖项,否则无法使用Linux容器。
我只会使用Windows容器。否则,您将在Windows计算机上看到一个更大的安装程序。

u5i3ibmn

u5i3ibmn7#

更新我的Windows版本似乎可以修复这个问题。我也遇到过同样的错误,但更新Windows后,Docker工作起来很有魅力。

相关问题