如何在Windows 11上显示来自Docker桌面容器的GUI应用程序

qxsslcnc  于 2023-02-11  发布在  Docker
关注(0)|答案(2)|浏览(441)

从这个article,它指出,windows 11本机支持运行的X11和wayland应用程序的wsl。
我试着通过一个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
rwqw0loc

rwqw0loc1#

我偶然发现了你的问题,而尝试同样的事情,你是和actually得到它的帮助下工作this blog post on Microsoft .我使用一个最小的Dockerfile基于Ubuntu和安装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

我希望这对你也有好处。

nxagd54h

nxagd54h2#

这个答案很大程度上是基于chrillof所说的。谢谢你给了我一个极好的开始!
对于使用WSL 2的Windows上的Docker Desktop用户来说,这里的关键是:
1.容器主机(即docker-desktop-data WSL 2发行版)本身没有/tmp/.X11-unix。该文件夹实际上位于docker-desktop发行版上的/mnt/host/wslg/.X11-unix文件夹中,当运行容器时,该文件夹将转换为/run/desktop/mnt/host/wslg/.X11-unix
1.没有现成的环境变量可以帮助您,因此您需要明确指定环境变量,并记住这些文件夹。
我发现了这个GitHub issue,其中有人必须手动设置环境变量,这使我能够将其他人在WSL 2上直接体验到的内容与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)
需要说明的是,我没有检查音频是否正常工作,但是如果您已经安装了WSL 2,这确实允许您避免安装另一个X11服务器。

相关问题