我正在运行带有python代码的docker容器,该容器使用主机MacBook Pro内置麦克风将声音记录了几秒钟。
我面临的挑战之一是确定如何在Docker容器中提供访问/共享Macbook Pro麦克风的功能。关于堆栈溢出或其他地方的大多数现有问题都为基于Linux的发行版提供了解决方案,但我对Mac OS所做的事情没有太多运气。
操作系统版本详细信息:
System Version: macOS 10.14.2 (18C54)
Kernel Version: Darwin 18.2.0
Docker:
Client: Docker Engine - Community
Version: 18.09.2
API version: 1.39
Go version: go1.10.8
Git commit: 6247962
Built: Sun Feb 10 04:12:39 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 04:13:06 2019
OS/Arch: linux/amd64
Experimental: false
python代码很简单,并且可以在主机上按预期工作。
import sounddevice as sd
import numpy as np
fs = 48000
duration=5
rec = sd.rec(int(duration * fs), samplerate=fs, channels=1, blocking=True)
print(rec)
这是docker文件:
FROM python:3
RUN apt-get -y update
RUN apt-get -y install libasound-dev
RUN apt-get -y install portaudio19-dev
WORKDIR /usr/src/app
COPY requirements.txt ./
COPY AudioRecordingTest.py ./
RUN pip install -r requirements.txt
CMD [ "python", "./AudioRecordingTest.py" ]
docker build -t audiorecording:1.0 .
docker run -it --rm --device --privileged=true DONT_KNOW_ABOUT_THIS_PART:/dev/snd audiorecording:1.0
理想情况下,应该像在Linux作为主机那样安装/共享麦克风。如果不是,还有哪些其他可能的解决方案?
docker run -it --rm --device --privileged=true DONT_KNOW_ABOUT_THIS_PART:/dev/snd audiorecording:1.0
答案 0 :(得分:1)
尝试在主机上运行pulseaudio
服务器并从docker连接到它。
您将需要在pulseaudio
支持下构建Docker:
RUN apt-get update && apt-get install -y \
vorbis-tools \
sox \
alsa-utils \
libasound2 \
libasound2-plugins \
pulseaudio \
pulseaudio-utils \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
然后
load-module module-native-protocol-tcp
添加到/etc/pulse/default.pa
-e
将其地址作为环境变量公开给docker -v
选项共享)来授权它在docker中的使用--device
添加对主机设备的访问权限然后运行
docker run -it \
--device=/dev/snd \
-e PULSE_SERVER=host.docker.internal \
-v ~/.config/pulse:/home/pulseaudio/.config/pulse \
... + other options you need