如何让ALSA播放在docker中可用?

之前pull了一个ros:kinetic-robot镜像,这个镜像是基于ubuntu的,然后把以前的ALSA播放wav代码挂上去执行

docker run -it \
--device /dev/snd:/dev/snd \
-v /media/dyan/project/projects/voice/:/data/voice/ \
ros:kinetic-robot

播放音频报错了,打开声卡设备时出了问题

ALSA lib pcm_dmix.c:1029:(snd_pcm_dmix_open) unable to open slave #这是snd_pcm_open()输出的异常
cannot open audio device default (No such file or directory) #这一行是我在err_num=snd_pcm_open()失败后打印的,括号中的信息是snd_strerror(err_num)

查看过了一些相关问题run apps using audio in a docker container
但是仍然解决不能解决。
在容器里面apt search alsa,alsa的库是有的,代码在容器中也能编译通过。

root@72b53ba14730:/# apt search alsa
Sorting... Done
Full Text Search... Done
libasound2/now 1.1.0-0ubuntu1 amd64 [installed,local]
  shared library for ALSA applications

libasound2-data/now 1.1.0-0ubuntu1 all [installed,local]
  Configuration files and profiles for ALSA drivers

libasound2-dev/now 1.1.0-0ubuntu1 amd64 [installed,local]
  shared library for ALSA applications -- development files

libgcrypt20/now 1.6.5-2ubuntu0.4 amd64 [installed,local]
  LGPL Crypto library - runtime library

libsdl1.2debian/now 1.2.15+dfsg1-3 amd64 [installed,local]
  Simple DirectMedia Layer

不知道问题出在哪里,是设备映射哪里不对吗?

阅读 6k
1 个回答

找到了
链接描述
链接描述

docker run -it \
    --device /dev/snd \
    -e PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native \
    -v ${XDG_RUNTIME_DIR}/pulse/native:${XDG_RUNTIME_DIR}/pulse/native \
    -v ~/.config/pulse/cookie:/root/.config/pulse/cookie \
    --group-add $(getent group audio | cut -d: -f3) \
    -v /media/dyan/project/projects/voice/:/data/voice/ \
    ros:kinetic-robot

然后还需要安装一些包

apt update && apt install alsa-base pulseaudio

嗯,目前可以正常播放了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进