如何将audio从Docker容器暴露给Mac?
我知道这是可能的在Linux主机系统上使用脉冲audio但paprefs
是为Linux而不是为Mac构build的。
Docker for Mac虚拟机没有任何声音直通设备,所以没有任何可以从这个angular度利用的东西。 相比之下,virtualbox或vmware融合虚拟机有能力做直通audio。
我能够通过以下命令安装pulseaudio并使用OSX:
brew install pulseaudio
我能够通过运行下面的validation来validation这个工作,听到我的扬声器发出的声音:
paplay cockatiel.wav
我的下一步是find一个有paplay
副本的paplay
。 我发现jess / pulseaudio ,它似乎是一个pulseaudio 服务器 ,但我应该能够使用它作为一个客户端 。
我在Archlinux Wiki上find了关于设置pulseaudionetworking声音的指南: https : //wiki.archlinux.org/index.php/PulseAudio/Examples#PulseAudio_over_network
我能够通过以下操作来适应这种情况。 我在我的Mac上编辑了/usr/local/Cellar/pulseaudio/9.0/etc/pulse/default.pa
,并取消注释以下两行:
load-module module-esound-protocol-tcp load-module module-native-protocol-tcp
我在我的Mac上重新运行paplay cockatiel.wav
,以确保我的更改仍然有效。 pulseaudio守护进程似乎是按需启动的,如果我input了错字,将其投诉传回给paplay
以便在屏幕上打印。 我对default.pa的修改仍然有声音,所以我很满意我的修改没有破坏任何东西。
接下来,我在这样一个容器中运行pulseaudio客户端:
docker run --rm -v $HOME:$HOME -w $HOME -it \ -e PULSE_SERVER=192.168.10.23 \ -e HOME=$HOME --entrypoint paplay \ jess/pulseaudio $HOME/cockatiel.wav
这是做一个容器与本地主目录作为一个卷。 这有两个目的。 首先是我的cockatiel.wav位于$HOME
内部。 第二个是因为客户端和服务器需要有一个相同的~/.config/pulse/cookie
文件(根据archlinux wiki指南)。
PULSE_SERVER
环境variables是我的OSX主机的en0 IP地址,因此paplay知道要连接到什么。
HOME
环境variables是必要的,所以paplay可以find相同的~/.config/pulse/cookie
文件。
我能够通过pulseaudio从docker-for-mac上运行的容器播放声音。
只要你的~/.config/pulse/cookie
文件出现在正确的位置,你应该可以播放声音。 您不必使用主机卷来实现这一点 – 您也可以执行“docker cp”,甚至将其COPY
到图像中。