我通过'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容器时,它再次失败,并显示与上面相同的错误消息。
答案 0 :(得分:3)
解决这个问题的主要目标是:
答案 1 :(得分:0)
更新Windows版本似乎可以解决此问题。我遇到了同样的错误,但是在更新Windows之后,Docker的运行就像一个魅力。
答案 2 :(得分:0)
现在以管理员身份打开 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 一起使用。