如何在 Windows 11 上从 docker 桌面容器显示 GUI 应用程序

问题描述 投票:0回答:3

从这篇文章中,它指出Windows 11原生支持在wsl上运行X11和wayland应用程序。

我尝试通过 docker 容器执行相同的操作,设置环境变量

DISPLAY="host.docker.internal:0.0"
,并运行 gui 应用程序(如
gedit
)。但我却得到了这个错误:

Unable to init server: Could not connect: Connection refused

Gtk-WARNING **: 17:05:50.416: cannot open display: host.docker.internal:0.0
docker windows-subsystem-for-linux x11 windows-11 wayland
3个回答
5
投票

这个答案很大程度上基于 Chrillof 的说法。感谢您的出色开始!

对于使用 WSL2 的 Windows 上的 Docker Desktop 用户来说,关键的事情是:

  1. 容器主机(即 docker-desktop-data WSL2 发行版)本身没有
    /tmp/.X11-unix
    。该文件夹实际上位于 docker-desktop 发行版上的
    /mnt/host/wslg/.X11-unix
    文件夹中,在运行容器时会转换为
    /run/desktop/mnt/host/wslg/.X11-unix
  2. 没有内置环境变量可以帮助您,因此您需要在考虑到这些文件夹的情况下显式指定环境变量。

我发现了这个 GitHub 问题,其中有人必须手动设置环境变量,这使我能够将其他人直接在 WSL2 上体验到的点与 Chrillof 的解决方案联系起来

因此,从主机使用PowerShell修改chrillof的解决方案,它看起来更像是:

docker run -it -v /run/desktop/mnt/host/wslg/.X11-unix:/tmp/.X11-unix `
               -v /run/desktop/mnt/host/wslg:/mnt/wslg `
               -e DISPLAY=:0 `
               -e WAYLAND_DISPLAY=wayland-0 `
               -e XDG_RUNTIME_DIR=/mnt/wslg/runtime-dir `
               -e PULSE_SERVER=/mnt/wslg/PulseServer `
               guitest:1.0

在我的电脑上,它看起来像 this (demo of WSLg X11)

需要明确的是,我还没有检查音频是否正常工作,但是如果您已经安装了 WSL2,这确实可以让您避免安装另一个 X11 服务器。


4
投票

我在尝试与您相同的事情时偶然发现了您的问题,并在这篇关于 Microsoft 的博客文章的帮助下实际上让它发挥了作用。我使用基于 Ubuntu 的最小 Dockerfile 并安装

gedit
:

FROM ubuntu:22.04
RUN apt update -y && apt install -y gedit
CMD ["gedit"]

以通常的方式创建图像,例如

docker build . -t guitest:1.0

在 WSL 命令行上,像这样启动它:

 docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix \
                -v /mnt/wslg:/mnt/wslg \
                -e DISPLAY \
                -e WAYLAND_DISPLAY \
                -e XDG_RUNTIME_DIR \
                -e PULSE_SERVER \
                guitest:1.0

我希望这对您也有好处。


0
投票

不确定它是否对您有帮助,但我在 docker 中使用 Xlaunch 作为 UI。这是一个使用示例 docker 中的 gui 应用程序

© www.soinside.com 2019 - 2024. All rights reserved.