较新版本的Windows(内部版本21364或更高版本(支持WSL2中的GUI,包括完整的音频支持。这真是太神奇了。
既然WSL2现在支持音频,那么我们如何使用Docker的WSL2引擎让音频在Windows上运行的Docker容器中工作呢?
在Linux主机上,您可以简单地使用例如--device /dev/snd
调用Docker映像。
从Windows命令行运行启用了声音的Docker映像的等效命令是什么?
WSL中没有/dev/snd
或直接音频硬件仿真,即使在新的Windows 11设置中也是如此。相反,最新版本的WSL通过/mnt/wslg/
中的套接字将PulseAudio客户端指向外部PulseAudio服务器来实现音频输出。该服务器运行在另一个名为WSLg的Linux发行版上,该发行版在Windows内部运行,唯一目的是在WSL发行版和Windows之间传输音频和图形数据。
它看起来有点像:
Docker container <-> WSL <-> WSLg <-> Windows 11
实际的PulseAudio服务器位于WSLg中。套接字的位置存储在环境变量PULSE_SERVER
:中
# On WSL
echo $PULSE_SERVER
/mnt/wslg/PulseServer
因此,除了确保你的Dockerfile有一个基本的PulseAudio安装(RUN apt-get install -y pulseaudio
或同等版本(外,你所需要做的就是调用以下图像:
在WSL:
docker run -t -i -e "PULSE_SERVER=${PULSE_SERVER}" -v /mnt/wslg/:/mnt/wslg/ image_name
或者从Windows命令行,如:
wsl docker run -t -i -e "PULSE_SERVER=/mnt/wslg/PulseServer" -v /mnt/wslg/:/mnt/wslg/ image_name
或
docker run -t -i -e "PULSE_SERVER=/mnt/wslg/PulseServer" -v \wsl$Ubuntumntwslg:/mnt/wslg/ image_name