Docker 在Ubuntu 16.04系统启动时创建pulseaudio套接字
我正在运行一个docker容器,并将pulse server环境变量传递给我的容器。容器设置为“始终重新启动”策略。如果/tmp文件夹中不存在“pulseaudio.socket”,则容器无法运行 因此,为了实现我的目标,我添加了命令Docker 在Ubuntu 16.04系统启动时创建pulseaudio套接字,docker,ubuntu-16.04,audio-streaming,pulseaudio,Docker,Ubuntu 16.04,Audio Streaming,Pulseaudio,我正在运行一个docker容器,并将pulse server环境变量传递给我的容器。容器设置为“始终重新启动”策略。如果/tmp文件夹中不存在“pulseaudio.socket”,则容器无法运行 因此,为了实现我的目标,我添加了命令“pactl load module module native protocol unix socket=/tmp/pulseaudio.socket”,以启动应用程序[通过搜索启动程序访问的GUI程序]。此命令在/tmp文件夹中创建一个pulseaudio.so
“pactl load module module native protocol unix socket=/tmp/pulseaudio.socket”
,以启动应用程序[通过搜索启动程序访问的GUI程序]。此命令在/tmp文件夹中创建一个pulseaudio.socket文件
如果在docker启动容器之前创建了pulseaudio.socket文件,则此方法大部分时间都有效。如果docker在创建pulseaudio.socket之前启动容器,则容器无法启动
为了确保总是在docker启动容器之前创建pulseaudio.socket,我将代码“pactl load module native protocol unix socket=/tmp/pulseaudio.socket”
添加到/etc/rc.local,并尝试将其添加到init.d
但是将代码添加到/etc/rc.local或init.d会在/tmp文件夹中创建一个pulse-pkdhtxmmmr18n文件夹,而不是文件pulseaudio.socket
如何确保始终创建名为pulseaudio.socket的文件而不是pulse-pkdhtxmmmr18n
我的主要目标是在docker启动之前或docker尝试使用重启策略启动容器之前创建/tmp/pulseaudio.socket文件
或者有没有办法让docker服务首先检查
pulseaudio.socket文件存在,如果存在,则只启动
集装箱
我该怎么做?我这样解决了这个问题: 我的容器有一个启动应用程序的节点脚本,该应用程序需要pulseaudio才能正常运行。这是我的docker运行命令。 请注意粗体代码。这就是我修改的 上一命令 sudo docker run--pid=host-dit--restart除非停止--env pulseaudio.socket--env pulseaudio.COOKIE=/home/$USER/pulseaudio.COOKIE--volume/tmp/pulseaudio.socket:/tmp/pulseaudio.socket--volume/home/$USER/pulseaudio.client.conf:/etc/PULSE/client.conf--用户$(id-u):$(id-g)--privileged--net=host ubuntu bash-c“node service.js&&tail-F anything” 当前命令 sudo docker run--pid=host-dit--restart除非停止--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)--特权--net=host ubuntu bash-c“sh checksocket.sh&&tail-F任何东西” 在上一个命令中,仅当主机的/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
这个shell脚本会不断检查mounted/tmp文件夹中的pulseaudio.socket文件,如果它存在,则只会启动我的节点服务
这样,每当我重新启动计算机时,我的容器总是启动,并且一旦shell脚本在/tmp文件夹中检测到pulseaudio.socket,节点服务就会启动
我希望这能帮助那些试图将pulseaudio与docker结合使用以实现声音多路复用或避免主机上出现“设备或资源繁忙”错误(当您将docker与alsa结合使用时,会出现设备或资源繁忙错误,因为alsa直接捕获声卡)。如果有人需要更多帮助,请告诉我