Я решил проблему следующим образом:
В моем контейнере есть скрипт узла, который запускает приложение, и для правильной работы этого приложения требуется pulseaudio.Так вот моя команда запуска Docker.Обратите внимание на код, выделенный жирным шрифтом.Вот что я изменил.
Предыдущая команда
Запуск sudo docker --pid = host -dit --restart, если не остановлен --env PULSE_SERVER = unix: /tmp/pulseaudio.socket -env PULSE_COOKIE = / home / $ USER / pulseaudio.cookie - громкость /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 " узел службы.js && tail -Fчто-нибудь "
Текущая команда
Запуск sudo docker --pid = host -dit --restart если не остановлено --env PULSE_SERVER = unix: /tmp/pulseaudio.socket --env PULSE_COOKIE =/home/$USER/pulseaudio.cookie - громкость / 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 что-нибудь"
в предыдущемкоманда, контейнер, используемый для запуска, только если в папке / tmp был файл pulseaudio.socketхоста.
Теперь текущая рабочая команда монтирует - том / tmp: / tmp вместо - том /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
Этот сценарий оболочки продолжает проверять файл pulseaudio.socket в папке mount / tmp, и если он существует, то только онзапускает службу моего узла.
Таким образом, мой контейнер всегда запускается всякий раз, когда я перезагружаю свою машину, и служба узла запускается, когда сценарий оболочки обнаруживает pulseaudio.socket в папке / tmp.
Надеюсь, это поможет кому-то, ктопытаются использовать pulseaudio с докером для целей мультиплексирования звука или во избежание ошибки «устройство или ресурс заняты» (ошибка «устройство или ресурс занята» возникает при использовании докера с alsa, поскольку alsa напрямую захватывает звуковую карту) на хост-компьютере.Дайте мне знать, если кому-то понадобится дополнительная помощь