日志和故障排除

预计阅读时间:16分钟

您是否知道Docker桌面现在为订阅Pro或Team计划的开发人员提供支持?单击此处了解更多信息。

该页面包含有关如何诊断和排除Docker桌面问题,请求Docker桌面支持(仅限Pro和Team计划用户),发送日志并与Docker桌面团队进行通信,使用我们的论坛和成功中心,在GitHub上浏览和记录问题的信息,并找到已知问题的解决方法。

疑难排解

从菜单栏中选择鲸鱼菜单>故障排除,以查看故障排除选项。

对Docker桌面进行故障排除

疑难解答页面包含以下选项:

  • 重新启动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论坛,我们可以帮助您对日志数据进行故障排除。报告问题之前,我们建议您阅读本页上提供的信息,以解决一些常见的已知问题。

  1. 从菜单中选择鲸鱼菜单>故障排除
  2. 登录Docker桌面。此外,请确保您已登录Docker帐户
  3. 点击获取支持。这将打开应用程序内支持页面,并开始收集诊断信息。 诊断与支持
  4. 诊断收集过程完成后,单击上载以获取诊断ID
  5. 在上传诊断后,Docker桌面会打印诊断ID。复制此ID。
  6. 如果您已订阅专业版或团队版计划,请点击联系支持。这将打开Docker Desktop支持表格。填写所需的信息,然后将您先前复制的ID添加到Diagnostics ID字段中。单击提交以请求Docker桌面支持。

    笔记

    您必须使用Pro或Team计划凭据登录Docker桌面才能访问支持表格。有关Docker Desktop支持的内容,请参阅Support

  7. 如果您尚未订阅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共享文件,多克尔桌面上设置权限共享卷 到默认值0777readwriteexecute权限usergroup)。

共享卷的默认权限不可配置。如果使用的应用程序在容器运行时需要的权限与共享卷默认值不同,则需要使用非主机安装的卷,或者找到一种使应用程序使用默认文件权限的方法。

另请参阅,是否 可以针对特定于容器的部署要求更改共享卷上的权限? 在常见问题解答中。

卷挂载需要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

  1. 虚拟机平台
  2. 适用于Linux的Windows子系统
  3. 在BIOS中启用虚拟化
  4. Windows启动时启用了虚拟机监控程序

启用WSL 2

超V

在Windows 10 Pro或Enterprise上,您还可以在启用以下功能的情况下使用Hyper-V:

  1. Hyper-V 已安装并正常工作
  2. 在BIOS中启用虚拟化
  3. Windows启动时启用了虚拟机监控程序

Windows上的Hyper-V功能

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-VWSL 2之外,还必须启用虚拟化。检查任务管理器上的“性能”选项卡:

任务管理器

如果您手动卸载Hyper-V,WSL 2或禁用虚拟化,则Docker Desktop无法启动。请参阅无法在Windows 10企业版上为Windows运行Docker

Windows启动时启用了虚拟机监控程序

如果您已完成上述步骤,但仍遇到Docker Desktop启动问题,则可能是因为安装了Hypervisor,但未在Windows启动期间启动。某些工具(例如旧版的Virtual Box)和视频游戏安装程序会在启动时禁用虚拟机监控程序。要重新启用它:

  1. 打开管理控制台提示。
  2. 运行bcdedit /set hypervisorlaunchtype auto
  3. 重新启动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故障排除日志问题