web-dev-qa-db-fra.com

Comment jouer du son dans un conteneur Docker

J'essaie de docker une application de synthèse vocale pour partager le code avec d'autres développeurs, mais le problème que j'ai actuellement est que le conteneur Docker ne trouve pas la carte son sur ma machine hôte.

Lorsque j'essaie de lire un fichier wav dans mon conteneur Docker

root@3e9ef1e869ea:/# aplay Alesis-Fusion-Acoustic-Bass-C2.wav
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:4738:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:722: audio open error: No such file or directory

Je suppose que le principal problème est que le conteneur Docker ne parvient pas à atteindre la carte son de mon hôte.

Jusqu'à présent, j'ai

  1. J'ai installé alsa-utils et la plupart des dépendances alsa dans mon conteneur docker.
  2. Ajoutée --group-add audio lors de l'exécution du conteneur en spécifiant docker run --group-add audio -t -i self/debian /bin/bash

Je ne sais pas si cela est même possible avec docker (je ne suis pas exactement sûr de la façon dont les ressources matérielles telles que les cartes son sont partagées avec les conteneurs). J'utilise un conteneur Debian sur un hôte Mac OS Yosemite.

15
Anoop

Il est certainement possible, vous devez monter/dev/snd, voir comment Jess Frazelle lance un conteneur Spotify, à partir de

https://blog.jessfraz.com/post/docker-containers-on-the-desktop/

tu remarqueras

docker run -it \
    -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    -e DISPLAY=unix$DISPLAY \ # pass the display
    --device /dev/snd \ # sound
    --name spotify \
    jess/spotify

ou pour Chrome, à la fin

docker run -it \
    --net Host \ # may as well YOLO
    --cpuset-cpus 0 \ # control the cpu
    --memory 512mb \ # max memory it can use
    -v /tmp/.X11-unix:/tmp/.X11-unix \ # mount the X11 socket
    -e DISPLAY=unix$DISPLAY \ # pass the display
    -v $HOME/Downloads:/root/Downloads \ # optional, but Nice
    -v $HOME/.config/google-chrome/:/data \ # if you want to save state
    --device /dev/snd \ # so we have sound
    --name chrome \
    jess/chrome
19
user2915097