使用 WSL2 在 Docker Desktop 上运行的容器没有实时输出

Posted

技术标签:

【中文标题】使用 WSL2 在 Docker Desktop 上运行的容器没有实时输出【英文标题】:No live output from containers running on Docker Desktop with WSL2 【发布时间】:2021-08-08 22:37:50 【问题描述】:

我正在开发一个在 docker 容器(django、celery、postgres、redist...等)中运行的 python-django 应用程序。它在带有 WSL2-Debian 和 Docker 桌面的 Windows 10 上运行。

在我的工作中,我需要观察所有这些容器的控制台,这样我就可以监控应用程序的行为,比如当你运行 docker-compose up 时,你就可以让它们全部上线。

当您在窗口化的 Docker 桌面应用程序中单击容器时,您可以看到容器的控制台输出,但不是实际的 - 它看起来直到某个时间点才有效,并且控制台输出没有更新。 我记得它在两到三个 Docker Desktop 更新之前就开始工作了,我确信它是实时的,但不是现在。

我是否更改了设置或 Docker Desktop 被窃听?

附言。当我使用 docker-compose up(不带 -d)启动容器时,我可以在我的 shell 控制台上观察实时日志,但在 Docker Desktop 中却看不到了。

任何帮助如何恢复 Docker 桌面实时控制台视图?

【问题讨论】:

GitHub 上有一个关于此的问题。这一定是一个实际的错误:github.com/docker/for-win/issues/11251 我确认降级到 Docker Desktop v3.3.1 解决了这个问题。 有一个 Docker Desktop 快照可供您测试问题是否已解决;见my edited answer below Docker Desktop 3.6.0 应该可以解决这个问题。 【参考方案1】:

Docker Desktop 3.4(昨天 6 月 9 日发布)应该已经解决了 docker/for-win issue 11251。

升级后我看不到错误(使用普通的docker-compose,而不是测试版docker-compose v2)。

但是,正如 the OP twk 和 issue 11251 所评论的:

实时日志以某种方式损坏 - 在每个新行之后添加额外的换行符,但历史日志条目(例如,当您切换到/从另一个容器时)显示条目之间没有换行符(这没关系)。


Update June 29th 来自Mathieu Champlon

抱歉,花了一些时间,但我们现在有一个内部版本可以修复它,如果您想尝试一下:win/stable/amd64/66242/Docker Desktop Installer.exe


2021 年 8 月更新:Issue 11251 just closed:

Docker Desktop 3.6.0 已发布,其中包含对此问题的修复。

【讨论】:

还有一个小问题:实时日志用换行符分隔,但一般都可以。 @twk 感谢您的反馈。我已将您的评论包含在答案中以提高知名度。【参考方案2】:

这是 Docker Desktop v3.3.3 中的一个错误

GitHub 问题:@Drarig29 指出的https://github.com/docker/for-win/issues/11251

【讨论】:

实际上,它在 Docker Desktop v3.3.2 中也不起作用。

以上是关于使用 WSL2 在 Docker Desktop 上运行的容器没有实时输出的主要内容,如果未能解决你的问题,请参考以下文章

WSL2修改存储位置(示例:Docker-Desktop)

基于WSL2 的 Docker Desktop 启动时 Failed to set version to docker-desktop exit code -1的解决方法

WSL2 子系统迁移(docker&ubuntu)

wsl2迁移docker的ext4.vhdx

Windows安装WSL2和docker

docker desktop win10挂载问题解决