日志和故障排除
预计阅读时间:16分钟
您是否知道Docker桌面现在为订阅Pro或Team计划的开发人员提供支持?单击此处了解更多信息。
该页面包含有关如何诊断和排除Docker桌面问题,请求Docker桌面支持(仅限Pro和Team计划用户),发送日志并与Docker桌面团队进行通信,使用我们的论坛和成功中心,在GitHub上浏览和记录问题的信息,并找到已知问题的解决方法。
疑难排解
从菜单栏中选择>故障排除,以查看故障排除选项。
疑难解答页面包含以下选项:
-
重新启动Docker Desktop:选择以重新启动Docker Desktop。
-
支持:Pro和Team计划的开发人员可以使用此选项发送支持请求。其他用户可以使用此选项来诊断Docker Desktop中的任何问题。有关更多信息,请参阅诊断和反馈以及支持。
-
重置Kubernetes集群:选择此选项以删除所有堆栈和Kubernetes资源。有关更多信息,请参见Kubernetes。
-
清洁/清除数据:选择此选项可删除容器和图像数据。选择是否要从Hyper-V,WSL 2或Windows容器中删除数据,然后单击“删除”进行确认。
-
重置为出厂默认设置:选择此选项可将Docker桌面上的所有选项重置为初始状态,与首次安装Docker桌面时相同。
诊断和反馈
应用内诊断
如果遇到在本文档中找不到解决方案的问题,请访问GitHub上的Docker Desktop for Windows问题或Docker Desktop for Windows论坛,我们可以帮助您对日志数据进行故障排除。报告问题之前,我们建议您阅读本页上提供的信息,以解决一些常见的已知问题。
- 从菜单中选择>故障排除。
- 登录Docker桌面。此外,请确保您已登录Docker帐户。
- 点击获取支持。这将打开应用程序内支持页面,并开始收集诊断信息。
- 诊断收集过程完成后,单击上载以获取诊断ID。
- 在上传诊断后,Docker桌面会打印诊断ID。复制此ID。
- 如果您已订阅专业版或团队版计划,请点击联系支持。这将打开Docker Desktop支持表格。填写所需的信息,然后将您先前复制的ID添加到Diagnostics ID字段中。单击提交以请求Docker桌面支持。
笔记
您必须使用Pro或Team计划凭据登录Docker桌面才能访问支持表格。有关Docker Desktop支持的内容,请参阅Support。
- 如果您尚未订阅Pro或团队计划,则可以单击“升级”以受益于Docker支持来升级您的现有帐户。或者,单击“报告错误”以在GitHub上打开一个新的Docker桌面问题。这会在Web浏览器中的“新问题”模板中在GitHub上打开Docker Desktop for Windows。完成所需的信息,并确保您添加了先前复制的诊断ID。单击提交新问题以创建新问题。
从终端诊断
有时,自己运行诊断很有用,例如,如果Docker Desktop for Windows无法启动。
首先找到com.docker.diagnose
应该位于的C:\Program
Files\Docker\Docker\resources\com.docker.diagnose.exe
。
要 在Powershell中创建和上传诊断,请运行:
PS C:\> & "C:\Program Files\Docker\Docker\resources\com.docker.diagnose.exe" gather -upload
诊断完成后,您应该具有以下输出,其中包含您的诊断ID:
Diagnostics Bundle: C:\Users\User\AppData\Local\Temp\CD6CF862-9CBD-4007-9C2F-5FBE0572BBC2\20180720152545.zip
Diagnostics ID: CD6CF862-9CBD-4007-9C2F-5FBE0572BBC2/20180720152545 (uploaded)
故障排除主题
确保证书设置正确
Docker Desktop会忽略不安全注册表中列出的证书,并且不会将客户端证书发送给它们。诸如此类的docker run
尝试从注册表中拉出的命令在命令行上产生错误消息,如下所示:
Error response from daemon: Get http://192.168.203.139:5858/v2/: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
以及在注册表上。例如:
2017/06/20 18:15:30 http: TLS handshake error from 192.168.203.139:52882: tls: client didn't provide a certificate
2017/06/20 18:15:30 http: TLS handshake error from 192.168.203.139:52883: tls: first record does not look like a TLS handshake
有关使用客户端和服务器端证书的更多信息,请参见 如何添加自定义CA证书? 以及如何添加客户端证书?在入门主题中。
卷数
共享卷的数据目录上的权限错误
从Windows共享文件,多克尔桌面上设置权限共享卷
到默认值0777
(read
,write
,execute
权限user
和group
)。
共享卷的默认权限不可配置。如果使用的应用程序在容器运行时需要的权限与共享卷默认值不同,则需要使用非主机安装的卷,或者找到一种使应用程序使用默认文件权限的方法。
另请参阅,是否 可以针对特定于容器的部署要求更改共享卷上的权限? 在常见问题解答中。
卷挂载需要Linux容器的共享文件夹
如果您使用的是已挂载的卷,并且出现运行时错误指示未找到应用程序文件,拒绝对卷挂载的访问或服务无法启动(例如,使用Docker Compose时),则可能需要启用共享文件夹。
使用Hyper-V后端,从Windows挂载文件需要Linux容器的共享文件夹。单击 ,然后单击设置>共享文件夹,然后共享包含Dockerfile和卷的文件夹。
支持符号链接
符号链接在容器内部和容器之间工作。要了解更多信息,请参阅符号链接在Windows上如何工作?在常见问题解答中。
避免意外的语法错误,对容器中的文件使用Unix样式行结尾
任何要在容器中运行的文件都必须使用Unix样式的\n
行尾。这包括在命令行中针对构建和Docker文件中的RUN命令引用的文件。
Docker容器docker build
在Unix环境中运行,因此容器中的文件必须使用Unix样式行结尾:\n
,而不是Windows样式:\r\n
。使用Windows工具创作诸如Shell脚本之类的文件时,请牢记这一点,其中默认可能是Windows样式行的结尾。这些命令最终会传递给基于Unix的容器内的Unix命令(例如,传递给的shell脚本/bin/sh
)。如果使用Windows样式行结尾,则会docker run
失败,并显示语法错误。
有关此问题和解决方案的示例,请参阅GitHub上的此问题: Docker RUN无法执行shell脚本。
虚拟化
您的计算机必须具有以下功能,Docker Desktop才能正常运行。
WSL 2和Windows Home
- 虚拟机平台
- 适用于Linux的Windows子系统
- 在BIOS中启用虚拟化
- Windows启动时启用了虚拟机监控程序
超V
在Windows 10 Pro或Enterprise上,您还可以在启用以下功能的情况下使用Hyper-V:
- Hyper-V 已安装并正常工作
- 在BIOS中启用虚拟化
- Windows启动时启用了虚拟机监控程序
Docker Desktop需要安装和启用Hyper-V以及Windows Powershell的Hyper-V模块。Docker Desktop安装程序会为您启用它。
Docker Desktop还需要两个CPU硬件功能才能使用Hyper-V:虚拟化和二级地址转换(SLAT),也称为快速虚拟化索引(RVI)。在某些系统上,必须在BIOS中启用虚拟化。所需的步骤是特定于供应商的,但通常会调用BIOS选项Virtualization Technology (VTx)
或类似的选项。运行命令systeminfo
以检查所有必需的Hyper-V功能。有关更多详细信息,请参见Windows 10上Hyper-V的先决条件。
要手动安装Hyper-V,请参阅在Windows 10上安装Hyper-V。安装后需要重新启动。如果您在不重新引导的情况下安装Hyper-V,则Docker Desktop无法正常工作。
在开始菜单中,键入“打开或关闭Windows功能”,然后按Enter。在随后的屏幕中,确认已启用Hyper-V。
必须启用虚拟化
除了Hyper-V或WSL 2之外,还必须启用虚拟化。检查任务管理器上的“性能”选项卡:
如果您手动卸载Hyper-V,WSL 2或禁用虚拟化,则Docker Desktop无法启动。请参阅无法在Windows 10企业版上为Windows运行Docker。
Windows启动时启用了虚拟机监控程序
如果您已完成上述步骤,但仍遇到Docker Desktop启动问题,则可能是因为安装了Hypervisor,但未在Windows启动期间启动。某些工具(例如旧版的Virtual Box)和视频游戏安装程序会在启动时禁用虚拟机监控程序。要重新启用它:
- 打开管理控制台提示。
- 运行
bcdedit /set hypervisorlaunchtype auto
。 - 重新启动Windows。
您还可以参考有关代码流防护(CFG)设置的Microsoft TechNet文章。
Windows容器和Windows Server
Windows Server不支持Docker Desktop。如果您对如何在Windows 10上运行Windows容器有疑问,请参阅 在Windows和Linux容器之间切换。
完整的教程可在docker / labs中找到,关于 Windows容器入门。
您可以安装本机Windows二进制文件,该二进制文件允许您在没有Docker Desktop的情况下开发和运行Windows容器。但是,如果以这种方式安装Docker,则无法开发或运行Linux容器。如果尝试在本机Docker守护程序上运行Linux容器,则会发生错误:
C:\Program Files\Docker\docker.exe:
image operating system "linux" cannot be used on this platform.
See 'C:\Program Files\Docker\docker.exe run --help'.
在嵌套虚拟化场景中运行Docker Desktop
Docker Desktop可以在Windows 10 VM内运行,只要该VM正确配置,该Windows 10 VM即可在Mac上的Parallels或VMware Fusion等应用程序上运行。但是,由于这些应用程序虚拟化硬件的方式,仍然可能会出现问题和间歇性故障。由于这些原因,嵌套虚拟化方案中不支持Docker Desktop。在某些情况下可能会起作用,而在另一些情况下则不会。
为了获得最佳结果,我们建议您在Windows系统上本地运行Docker Desktop(以使用Windows或Linux容器),或者在Mac上本地运行Docker Desktop以使用Linux容器。
如果您仍然想使用嵌套虚拟化
-
确保在VMWare或Parallels中启用了嵌套虚拟化支持。检查“硬件”>“ CPU和内存”>“高级选项”>“启用嵌套虚拟化”中的设置(确切的菜单顺序可能会略有不同)。
-
为您的VM配置至少2个CPU和足够的内存以运行您的工作负载。
-
确保您的系统或多或少处于空闲状态。
-
确保您的Windows操作系统是最新的。一些内部人员构建存在一些问题。
-
您所拥有的处理器也可能是相关的。例如,与基于Nehalem的Mac Pro相比,基于Westmere的Mac Pro具有其他一些硬件虚拟化功能,新一代的Intel处理器也是如此。
嵌套虚拟化带来的典型故障
-
Linux VM的启动时间慢。如果您在日志中查找并找到一些前缀为的条目
Moby
。在实际的硬件上,启动Linux VM需要5到10秒钟。大致介于Connected
日志条目和* Starting Docker ... [ ok ]
日志条目之间的时间。如果在Windows VM内引导Linux VM,这可能会花费更长的时间。我们有60秒左右的超时时间。如果此时尚未启动VM,请重试。如果重试失败,我们将打印错误。您有时可以通过为Windows VM提供更多资源来解决此问题。 -
有时,当Linux尝试校准时间戳计数器(TSC)时,VM无法启动。此过程对时间非常敏感,在内部运行于虚拟机中的虚拟机中执行时可能会失败。CPU利用率也可能更高。
-
确保在Mac上的Parallels中已关闭“ PMU虚拟化”。检查“硬件”>“ CPU和内存”>“高级设置”>“ PMU虚拟化”中的设置。
网络问题
Docker桌面尚不支持IPv6。
解决方法
重启
重新启动PC,以停止/丢弃从先前安装的版本运行的守护程序的所有痕迹。
未设定 DOCKER_HOST
在DOCKER_HOST
不需要的环境变量设置。如果您使用bash,请使用命令unset ${!DOCKER_*}
将其取消设置。对于其他外壳,请查阅外壳的文档。
确保Docker正在运行以获取Web服务器示例
对于该hello-world-nginx
示例及其他示例,必须运行Docker Desktop才能访问上的Web服务器http://localhost/
。确保菜单栏中显示Docker鲸鱼,并确保在连接到Docker桌面引擎的外壳程序中运行Docker命令。否则,您可能会启动Web服务器容器,但转到时会收到“网页不可用”错误docker
。
如何解决port already allocated
错误
如果您看到类似Bind for 0.0.0.0:8080 failed: port is already allocated
或的错误listen tcp:0.0.0.0:8080: bind: address is already in use
...
这些错误通常是由Windows上使用这些端口的某些其他软件引起的。要发现此软件的身份,请使用resmon.exe
GUI并单击“网络”,然后单击“侦听端口”,或者在Powershell中使用它
netstat -aon | find /i "listening "
来发现当前使用该端口的进程的PID(PID是最右列中的数字) 。确定是关闭其他进程还是在Docker应用中使用其他端口。
安装防病毒软件后Docker Desktop无法启动
某些防病毒软件可能与Hyper-V和Microsoft Windows 10内部版本不兼容。该冲突通常在Windows更新后发生,并表现为Docker守护程序的错误响应和Docker Desktop启动失败。
对于临时的解决方法,请卸载防病毒软件,或浏览Docker Desktop论坛上建议的其他解决方法。
支持
Docker Desktop为订阅Pro或Team计划的开发人员提供支持。单击此处升级您的现有帐户。
本节包含有关如何获得支持的说明,并涵盖了Docker Desktop支持的范围。
如何获得Docker桌面支持?
如果您已经订阅了Pro and Team帐户,请通过Docker Desktop support提出票证。
Docker社区用户可以通过我们的Github re-for和for-mac获得支持,我们会尽力而为。
我可以得到什么支持?
如果您是Pro或Team用户,则可以请求以下类型的问题的支持:
- 桌面升级问题
- 桌面安装问题
- 在BIOS中启用虚拟化
- 启用Windows功能
- 安装崩溃
- 首次运行时未能启动Docker桌面
- 使用问题
- 崩溃关闭软件
- Docker桌面行为异常
- 配置问题
- 基本产品“如何”问题,例如“如何在WSL 2上高效工作”
不支持什么?
Docker Desktop排除了对以下类型问题的支持:
- 在适用文档中未指定的硬件或软件上或与之结合使用
- 在不受支持的操作系统(包括Beta /预览版操作系统)上运行
- 使用仿真运行其他体系结构的容器
- 支持Docker引擎,Docker CLI或其他捆绑的Linux组件
- 对Kubernetes的支持
- 标为实验性的功能
- 系统/服务器管理活动
- 支持桌面作为生产运行时
- 大规模部署/多机安装桌面
- 日常产品维护(数据备份,清理磁盘空间和配置日志轮换)
- Docker未提供的第三方应用程序
- 更改或修改的Docker软件
- 由于硬件故障,滥用或使用不当而导致Docker软件出现缺陷
- 除最新版本外的任何版本的Docker软件
- Docker未提供的第三方服务的报销和支出
- Docker支持不包括培训,定制和集成
支持哪些版本?
当前,我们仅提供对最新版本的Docker Desktop的支持。如果您运行的是旧版本,在我们调查您的支持请求之前,可能会要求您进行升级。
我可以在几台计算机上获得对Docker Desktop的支持?
作为Pro用户,您可以在一台机器上获得对Docker Desktop的支持。作为一个团队,作为计划的一部分,您可以获得对Docker Desktop的支持,即机器数量等于席位数量。
支持什么操作系统?
Docker Desktop适用于Mac和Windows。可以在以下页面上找到受支持的版本信息:
我可以在虚拟化硬件上运行Docker Desktop吗?
否,目前不支持此功能,并且违反了使用条款。
Windows,故障排除,日志,问题