Logs and troubleshooting

预计阅读时间:20分钟

此页面包含有关如何诊断和解决 Docker Desktop 问题、请求 Docker Desktop 支持、发送日志并与 Docker Desktop 团队沟通、使用我们的论坛和成功中心、在 GitHub 上浏览和记录问题以及查找已知问题的解决方法的信息.

Troubleshoot

选择鲸鱼菜单 > 从菜单栏中进行故障排除以查看故障排除选项.

Troubleshoot Docker Desktop

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

  • 重启 Docker 桌面:选择重启 Docker 桌面.

  • 支持:付费 Docker 订阅的用户可以使用此选项发送支持请求. 其他用户可以使用此选项来诊断 Docker Desktop 中的任何问题. 有关详细信息,请参阅诊断和反馈以及支持.

  • 重置 Kubernetes 集群:选择此选项可删除所有堆栈和 Kubernetes 资源. 有关更多信息,请参阅Kubernetes .

  • 清理/清除数据:选择此选项可删除容器和图像数据. 选择是否要从 Hyper-V、WSL 2 或 Windows 容器中删除数据,然后单击删除进行确认.

  • 重置为出厂默认值:选择此选项可将 Docker Desktop 上的所有选项重置为其初始状态,与首次安装 Docker Desktop 时相同.

Diagnose and feedback

In-app diagnostics

如果您遇到在本文档、 GitHub 上的 Docker Desktop for Windows 问题Docker Desktop for Windows 论坛中找不到解决方案的问题,我们可以帮助您对日志数据进行故障排除. 在报告问题之前,我们建议您阅读本页提供的信息以修复一些常见的已知问题.

  1. 选择鲸鱼菜单 > 从菜单中排除故障.
  2. 可选:登录 Docker Desktop. 此外,请确保您已登录Docker 帐户.
  3. 单击获取支持. 这将打开应用内支持页面并开始收集诊断信息. 诊断与支持
  4. 诊断收集过程完成后,单击上传以获取诊断 ID .
  5. 上传诊断信息后,Docker Desktop 会打印一个诊断 ID. 复制此 ID.
  6. 如果您有付费 Docker 订阅,请单击Contact Support . 这将打开Docker Desktop 支持表单. 填写所需信息并将您之前复制的 ID 添加到诊断 ID 字段. 单击提交以请求 Docker 桌面支持.

    Note

    您必须使用您的 Pro 或 Team 计划凭据登录到 Docker Desktop 才能访问支持表单. 有关 Docker Desktop 支持中涵盖的内容的信息,请参阅支持.

  7. 如果您没有付费的 Docker 订阅,请单击升级以从 Docker 支持中受益以升级您的现有帐户. 或者,单击报告错误以在 GitHub 上打开一个新的 Docker 桌面问题. 这会在您的 Web 浏览器中的"新问题"模板中打开 GitHub 上的 Docker Desktop for Windows . 填写所需信息并确保添加之前复制的诊断 ID. 单击提交新问题以创建新问题.

Diagnosing from the terminal

有时自己运行诊断很有用,例如,如果 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 订阅,请打开Docker Desktop 支持表单. 填写所需信息并将 ID 添加到诊断 ID 字段. 单击提交以请求 Docker 桌面支持.

Self-diagnose tool

Docker Desktop contains a self-diagnose tool which helps you to identify some common problems. Before you run the self-diagnose tool, locate com.docker.diagnose.exe. This is usually installed in C:\Program Files\Docker\Docker\resources\com.docker.diagnose.exe.

在 Powershell 中运行自诊断工具:

PS C:\> & "C:\Program Files\Docker\Docker\resources\com.docker.diagnose.exe" check

该工具运行一套检查并在每项检查旁边显示通过失败. 如果有任何失败,它会在最后突出显示最相关的.

Feedback

通过在for-win GitHub 存储库中创建问题,让我们知道您对自我诊断工具的反馈.

Troubleshooting topics

Make sure certificates are set up correctly

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 证书? 以及如何添加客户端证书? 在入门主题中.

Volumes

Permissions errors on data directories for shared volumes

从 Windows 共享文件时,Docker Desktop 将共享卷的权限设置为默认值0777usergroupreadwriteexecute权限).

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

另请参阅, 我可以更改共享卷的权限以满足特定于容器的部署要求吗? 在常见问题解答中.

Volume mounting requires shared folders for Linux containers

如果您正在使用挂载的卷并出现运行时错误,表明未找到应用程序文件、卷挂载的访问被拒绝或服务无法启动,例如在使用Docker Compose时,您可能需要启用共享文件夹.

使用 Hyper-V 后端,从 Windows 装载文件需要 Linux 容器的共享文件夹. 点击鲸鱼菜单 然后设置>共享文件夹并共享包含 Dockerfile 和卷的文件夹.

符号链接在容器内和跨容器工作. 要了解更多信息,请参阅符号链接如何在 Windows 上工作? 在常见问题解答中.

Avoid unexpected syntax errors, use Unix style line endings for files in containers

任何注定要在容器内运行的文件都必须使用 Unix 风格的\n行结尾. 这包括在用于构建的命令行和 Docker 文件中的 RUN 命令中引用的文件.

Docker 容器和docker build在 Unix 环境中运行,因此容器中的文件必须使用 Unix 风格的行尾: \n而不是Windows 风格的: \r\n . 在使用 Windows 工具编写诸如 shell 脚本之类的文件时请记住这一点,其中默认可能是 Windows 样式的行尾. 这些命令最终被传递给基于 Unix 的容器内的 Unix 命令(例如,传递给/bin/sh的 shell 脚本). 如果使用 Windows 样式的行尾,则docker run因语法错误而失败.

有关此问题的示例和解决方法,请参阅 GitHub 上的此问题: Docker RUN failed to execute shell script .

Path conversion on Windows

在 Linux 上,系统负责将路径安装到另一个路径. 例如,当您在 Linux 上运行以下命令时:

$ docker run --rm -ti -v /home/user/work:/work alpine

它将/work目录添加到目标容器以镜像指定路径.

但是,在 Windows 上,您必须更新源路径. 例如,如果您使用的是旧版 Windows shell ( cmd.exe ),则可以使用以下命令:

$ docker run --rm -ti -v C:\Users\user\work:/work alpine

这将启动容器并确保卷变得可用. 这是可能的,因为 Docker Desktop 检测到 Windows 样式的路径并提供适当的转换来挂载目录.

Docker Desktop 还允许您使用 Unix 风格的路径以适当的格式. 例如:

$ docker run --rm -ti -v /c/Users/user/work:/work alpine ls /work

Working with Git Bash

Git Bash(或 MSYS)在 Windows 上提供类 Unix 环境. 这些工具在命令行上应用它们自己的预处理. 例如,如果您在 Git Bash 中运行以下命令,则会出现错误:

$ docker run --rm -ti -v C:\Users\user\work:/work alpine
docker: Error response from daemon: mkdir C:UsersUserwork: Access is denied.

这是因为\字符在 Git Bash 中具有特殊含义. 如果您使用的是 Git Bash,则必须使用\\来中和它:

$ docker run --rm -ti -v C:\\Users\\user\\work:/work alpine

此外,在脚本中, pwd命令用于避免对文件系统位置进行硬编码. 它的输出是一个 Unix 风格的路径.

$ pwd
/c/Users/user/work

结合$()语法,下面的命令可以在 Linux 上运行,但是在 Git Bash 上会失败.

$ docker run --rm -ti -v $(pwd):/work alpine
docker: Error response from daemon: OCI runtime create failed: invalid mount {Destination:\Program Files\Git\work Type:bind Source:/run/desktop/mnt/host/c/Users/user/work;C Options:[rbind rprivate]}: mount destination \Program Files\Git\work not absolute: unknown.

您可以通过使用额外的/

$ docker run --rm -ti -v /$(pwd):/work alpine

脚本的可移植性不受影响,因为 Linux 将多个/视为单个条目. 必须消除单行上出现的每个路径.

$ docker run --rm -ti -v /$(pwd):/work alpine ls /work
ls: C:/Program Files/Git/work: No such file or directory

在此示例中, $(pwd)未转换,因为前面有"/". 但是,第二个"/work"在将其传递给 Docker Desktop 之前由 POSIX 层进行转换. 您也可以通过使用额外的/来解决此问题.

$ docker run --rm -ti -v /$(pwd):/work alpine ls //work

要验证错误是从您的脚本还是从其他来源生成的,您可以使用环境变量. 例如:

$ MSYS_NO_PATHCONV=1 docker run --rm -ti -v $(pwd):/work alpine ls /work

它只需要这里的环境变量. 价值无所谓.

在某些情况下,MSYS 还将冒号转换为分号. 使用~时也会发生类似的转换,因为 POSIX 层将其转换为 DOS 路径. MSYS_NO_PATHCONV也适用于这种情况.

Virtualization

您的机器必须具有以下功能,Docker Desktop 才能正常运行.

WSL 2 and Windows Home

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

WSL 2 enabled

Hyper-V

在 Windows 10 专业版或企业版上,您还可以使用启用了以下功能的 Hyper-V:

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

Hyper-V on Windows features

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 是否已启用.

Virtualization must be enabled

除了Hyper-VWSL 2之外,还必须启用虚拟化. 检查任务管理器上的性能选项卡:

Task Manager

If you manually uninstall Hyper-V, WSL 2 or disable virtualization, Docker Desktop cannot start. See 无法在 Windows 10 企业版上运行 Docker for Windows.

Hypervisor enabled at Windows startup

如果您已完成上述步骤并且仍然遇到 Docker Desktop 启动问题,这可能是因为 Hypervisor 已安装,但在 Windows 启动期间未启动. 某些工具(例如旧版本的 Virtual Box)和视频游戏安装程序会在启动时禁用管理程序. 要重新启用它:

  1. 打开管理控制台提示符.
  2. Run bcdedit /set hypervisorlaunchtype auto.
  3. 重新启动 Windows.

您还可以参考Microsoft TechNet有关代码流防护 (CFG) 设置的文章.

Windows containers and Windows Server

Windows Server 不支持 Docker 桌面. 如果您对如何在 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'.

Running Docker Desktop in nested virtualization scenarios

Docker Desktop 可以在 Windows 10 虚拟机中运行,该虚拟机在 Mac 上的 Parallels 或 VMware Fusion 等应用程序上运行,前提是虚拟机配置正确. 但是,由于这些应用程序虚拟化硬件的方式,仍然可能会出现问题和间歇性故障. 由于这些原因,在嵌套虚拟化场景中不支持 Docker Desktop . 它可能在某些情况下有效,而在其他情况下则无效.

为获得最佳结果,我们建议您在 Windows 系统上本地运行 Docker Desktop(以使用 Windows 或 Linux 容器),或在 Mac 上运行以使用 Linux 容器.

If you still want to use nested virtualization

  • 确保在 VMWare 或 Parallels 中启用了嵌套虚拟化支持. 检查硬件 > CPU 和内存 > 高级选项 > 启用嵌套虚拟化中的设置(确切的菜单顺序可能略有不同).

  • 为您的 VM 配置至少 2 个 CPU 和足够的内存来运行您的工作负载.

  • 确保您的系统或多或少处于空闲状态.

  • 确保您的 Windows 操作系统是最新的. 一些内部版本存在几个问题.

  • 您拥有的处理器也可能是相关的. 例如,与基于 Nehalem 的 Mac Pro 相比,基于 Westmere 的 Mac Pro 具有一些额外的硬件虚拟化功能,新一代的 Intel 处理器也是如此.

Typical failures we see with nested virtualization

  • Linux VM 的启动时间很慢. 如果您查看日志并找到一些以Moby为前缀的条目. 在真实硬件上,启动 Linux VM 需要 5-10 秒; 大致介于Connected日志条目和* Starting Docker ... [ ok ]日志条目之间的时间. 如果您在 Windows VM 中启动 Linux VM,这可能需要相当长的时间. 我们有 60 秒左右的超时时间. 如果到那时 VM 还没有启动,我们重试. 如果重试失败,我们会打印一个错误. 您有时可以通过向 Windows VM 提供更多资源来解决此问题.

  • 有时,当 Linux 尝试校准时间戳计数器 (TSC) 时,VM 无法启动. 此过程对时间非常敏感,并且在本身运行在 VM 内的 VM 内执行时可能会失败. CPU 利用率也可能更高.

  • 确保在 Mac 上的 Parallels 中关闭"PMU 虚拟化". 检查Hardware > CPU & Memory > Advanced Settings > PMU Virtualization中的设置.

Networking issues

Docker Desktop 不(尚)支持 IPv6.

Workarounds

Reboot

重新启动您的 PC 以停止/丢弃从以前安装的版本运行的守护程序的任何痕迹.

Unset DOCKER_HOST

DOCKER_HOST环境变量不需要设置. 如果您使用 bash,请使用命令unset ${!DOCKER_*}取消设置. 对于其他 shell,请查阅 shell 的文档.

Make sure Docker is running for webserver examples

对于hello-world-nginx示例和其他示例,必须运行 Docker Desktop 才能访问http://localhost/上的网络服务器. 确保 Docker 鲸鱼显示在菜单栏中,并且您在连接到 Docker 桌面引擎的 shell 中运行 Docker 命令. 否则,您可能会启动 webserver 容器,但在访问docker时会收到"网页不可用"错误.

How to solve port already allocated errors

如果您看到Bind for 0.0.0.0:8080 failed: port is already allocatedlisten tcp:0.0.0.0:8080: bind: address is already in use之类的错误...

这些错误通常是由使用这些端口的 Windows 上的某些其他软件引起的. 要发现此软件的身份,请使用resmon.exe GUI 并单击"网络",然后单击"侦听端口",或者在 Powershell 中使用netstat -aon | find /i "listening " netstat -aon | find /i "listening "以发现当前使用端口的进程的 PID(PID 是最右边列中的数字). 决定是关闭其他进程,还是在 docker 应用程序中使用不同的端口.

Docker Desktop fails to start when anti-virus software is installed

某些防病毒软件可能与 Hyper-V 和 Microsoft Windows 10 版本不兼容. 冲突通常发生在 Windows 更新之后,并表现为来自 Docker 守护程序的错误响应和 Docker Desktop 启动失败.

对于临时解决方法,请卸载防病毒软件,或探索 Docker 桌面论坛上建议的其他解决方法.

Support

本节包含有关如何获得支持的说明,并涵盖 Docker 桌面支持的范围.

How do I get Docker Desktop support?

如果您有付费的 Docker 订阅,请通过Docker Desktop 支持提出票证.

Docker 社区用户可以通过我们的 Github repos for-win 和 for-mac 获得支持,我们会尽最大努力做出回应.

What support can I get?

如果您有付费 Docker 订阅,您可以就以下类型的问题请求支持:

  • 桌面升级问题
  • 桌面安装问题
    • 在 BIOS 中启用虚拟化
    • 启用 Windows 功能
    • 安装崩溃
    • 首次运行时无法启动 Docker Desktop
  • 使用问题
    • 崩溃关闭软件
    • Docker Desktop 未按预期运行
  • 配置问题
  • 基本产品"操作方法"问题,例如"如何在 WSL 2 上高效工作"

What is not supported?

Docker Desktop 不支持以下类型的问题:

  • 在适用文档中未指定的硬件或软件上或与硬件或软件一起使用
  • 在不受支持的操作系统上运行,包括操作系统的 beta/预览版
  • 使用仿真运行不同架构的容器
  • 支持 Docker 引擎、Docker CLI 或其他捆绑的 Linux 组件
  • 支持 Kubernetes
  • 标记为实验性的功能
  • 系统/服务器管理活动
  • 支持桌面作为生产运行时
  • Desktop的规模部署/多机安装
  • 日常产品维护(数据备份、清理磁盘空间和配置日志轮换)
  • 非 Docker 提供的第三方应用程序
  • 更改或修改的 Docker 软件
  • 由于硬件故障、滥用或不当使用导致的 Docker 软件缺陷
  • 最新版本以外的任何版本的 Docker 软件
  • Docker 未提供的第三方服务的报销和费用
  • Docker 支持不包括培训、定制和集成

What versions are supported?

我们目前仅提供对最新版本 Docker Desktop 的支持. 如果您运行的是旧版本,在我们调查您的支持请求之前,您可能会被要求升级.

How many machines can I get support for Docker Desktop on?

作为 Pro 用户,您可以在单台机器上获得对 Docker Desktop 的支持. 作为一个团队,您可以获得对 Docker Desktop 的支持,其机器数量等于您计划中的席位数量.

What OS’s are supported?

Docker Desktop 适用于 Mac 和 Windows. 支持的版本信息可以在以下页面中找到:

Can I run Docker Desktop on Virtualized hardware?

不,目前这是不受支持且违反使用条款的.

windows, troubleshooting, logs, issues

by  icopy.site