37

I'm trying to dockerize a text to speech application for sharing the code with other developers, however the issue I am having right now is the docker container cannot find the sound card on my host machine.

When I try to play a wav file in my docker container

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 

I guess that the main problem is docker container is unable reach the sound card on my host.

So far I have

  1. I installed alsa-utils and most of the alsa dependencies within my docker container.
  2. Added --group-add audio while running the container by specifying docker run --group-add audio -t -i self/debian /bin/bash

I am not sure if this is even possible with docker(I'm not exactly sure of how hardware resources such as sound cards are shared with containers). I'm using a debian container on a Mac OS Yosemite host.

3
  • Would stackoverflow.com/q/40136606/6309 help? Commented Dec 11, 2016 at 9:06
  • 1
    For Alsa all you need is: --device /dev/snd. But if you use non-root user inside the container, you have to give it access to audio devices, so put in your Dockerfile: RUN usermod -a -G audio USERNAME. Commented May 10, 2018 at 12:28
  • On the forum: forums.docker.com/t/how-to-get-sound/36527 Commented Jul 1, 2018 at 10:07

1 Answer 1

35

It is definitely possible, you need to mount /dev/snd, see how Jess Frazelle launches a Spotify container, from

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

you will notice

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 

or for Chrome, at the end

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 
Sign up to request clarification or add additional context in comments.

10 Comments

Would you know how to get this working on Windows as a host? Specifically, what the SND device alternative is on Windows?
Any suggestions how to do the same on windows?
Will this work with JACK? Will I need to install any of that audio software (ALSA, pulseaudio or JACK) in the container, or is it sufficient to have them installed in the host machine?
What is the equivalent of --device /dev/snd on Windows?
As for the OP, I am also running MacOS and there is no /dev/snd file on my mac. The docker answer is: docker: Error response from daemon: error gathering device information while adding custom device "/dev/snd": no such file or directory.
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.