我正在运行一个docker容器,然后将脉冲服务器环境变量传递给容器。该容器设置为重新启动始终策略。如果" pulseaudio.socket" 在/tmp 文件夹中不存在,则容器将无法运行。
为了实现我的目标,我将命令"pactl load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket"
添加到启动应用程序[通过Searcing启动程序访问的GUI程序]。此命令创建 pulseaudio.socket /tmp 文件夹
如果在Docker启动容器之前,创建 pulseaudio.socket.socket.socket 文件。如果Docker在创建 pulseaudio.socket 之前启动容器,则容器无法启动。
要确保在docker启动容器之前始终创建pulseaudio.socket,我将代码"pactl load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket"
添加到>/etc/rc.local >。
但将代码添加到/etc/rc.local 或 init.d 在>中创建 punse> punse> punse-punse-pkdhtxmmr18n tmp 文件夹,而不是文件 pulseaudio.socket
如何确保代替 pulse-pkdhtxmmr18n ,始终创建称为 pulseaudio.socket 的文件?
我的主要目标是在Docker启动或Docker尝试使用RESTART Policy启动一个容器之前,创建/tmp/pulseaudio.socket 文件。
或有任何方法以使Docker服务首先检查是否 pulseaudio.socket文件存在,如果存在,则仅启动 容器?
我该怎么做?
我解决了这样的问题:
我的容器有一个启动应用程序的节点脚本,并且该应用程序需要PulseAudio才能正确运行。因此,这是我的Docker Run命令。注意大胆的代码。那就是我修改的。
上一个命令
sudo docker run --pid=host -dit --restart unless-stopped --env PULSE_SERVER=unix:/tmp/pulseaudio.socket --env PULSE_COOKIE=/home/$USER/pulseaudio.cookie **--volume /tmp/pulseaudio.socket:/tmp/pulseaudio.socket** --volume /home/$USER/pulseaudio.client.conf:/etc/pulse/client.conf --user $(id -u):$(id -g) --privileged --net=host ubuntu bash -c "**node service.js** && tail -F anything"
当前命令
sudo docker run --pid=host -dit --restart unless-stopped --env PULSE_SERVER=unix:/tmp/pulseaudio.socket --env PULSE_COOKIE=/home/$USER/pulseaudio.cookie **--volume /tmp:/tmp** --volume /home/$USER/pulseaudio.client.conf:/etc/pulse/client.conf --user $(id -u):$(id -g) --privileged --net=host ubuntu bash -c "**sh checksocket.sh** && tail -F anything"
在上一个命令中,仅在主机/tmp文件夹中有一个pulseaudio.socket
文件时才启动的容器。
现在,当前的工作命令安装 --volume /tmp:/tmp
而不是 --volume /tmp/pulseaudio.socket:/tmp/pulseaudio.socket
和 sh checksocket.sh
命令执行我在容器中创建的checksocket.sh
文件。
这是我的checkSocket.sh文件的代码:
#!/bin/bash
while sleep 0.5;
do if [ -e /tmp/pulseaudio.socket ]
then
value="node service.js"
exec $value
break
fi
done
此外壳脚本不断检查已安装的/tmp
文件夹中的pulseaudio.socket
文件,如果存在,则仅启动我的节点服务。
以这种方式,每当我重新启动机器时,我的容器总是启动,并且一旦shell脚本检测到 /tmp
文件夹中的pulseaudio.socket。
我希望这有助于试图与Docker一起使用PulseAudio的人,以进行声音多路复用或避免"设备或资源繁忙"错误(设备或资源繁忙的错误是在您将Docker与Alsa一起使用ALSA作为ALSA直接捕获的错误在主机上的声卡)。让我知道是否有人需要更多帮助