스택큐힙리스트

맥 OS Yosemite에서 Docker 컨테이너에서 소리를 재생하는 방법 본문

카테고리 없음

맥 OS Yosemite에서 Docker 컨테이너에서 소리를 재생하는 방법

스택큐힙리스트 2023. 12. 4. 16:20
반응형

root@3e9ef1e869ea:/# aplay Alesis-Fusion-Acoustic-Bass-C2.wav
ALSA lib confmisc.c:768:(parse_card) 해당 카드 '0'을(를) 찾을 수 없습니다.
ALSA lib conf.c:4259:(_snd_config_evaluate) 함수 snd_func_card_driver가 오류를 반환했습니다: 파일 또는 디렉토리가 없습니다.
ALSA lib confmisc.c:392:(snd_func_concat) 문자열을 평가하는 동안 오류가 발생했습니다.
ALSA lib conf.c:4259:(_snd_config_evaluate) 함수 snd_func_concat가 오류를 반환했습니다: 파일 또는 디렉토리가 없습니다.
ALSA lib confmisc.c:1251:(snd_func_refer) 이름을 평가하는 동안 오류가 발생했습니다.
ALSA lib conf.c:4259:(_snd_config_evaluate) 함수 snd_func_refer가 오류를 반환했습니다: 파일 또는 디렉토리가 없습니다.
ALSA lib conf.c:4738:(snd_config_expand) 평가 오류: 파일 또는 디렉토리가 없습니다.
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) 알 수 없는 PCM입니다.
aplay: main:722: 오디오 열기 오류: 파일 또는 디렉토리가 없습니다.

제 생각에 주요 문제는 도커 컨테이너가 호스트의 사운드 카드에 접속하지 못하고 있다는 것입니다.


지금까지 다음과 같은 방법을 시도해보았습니다.


  1. 나는 도커 컨테이너 내에서 alsa-utils와 대부분의 alsa 종속성들을 설치했다.

  2. 컨테이너를 실행할 때 --group-add audio를 추가하였다. docker run --group-add audio -t -i self/debian /bin/bash을 지정하였다.


나는 도커에서 이게 가능한지 확실하지 않다. (사운드 카드와 같은 하드웨어 리소스가 컨테이너와 어떻게 공유되는지 정확히 알지 못하겠다.) 나는 Mac OS Yosemite 호스트에서 debian 컨테이너를 사용하고 있다.

답변 1

이것은 분명히 가능합니다. /dev/snd를 마운트해야합니다. Jess Frazelle이 Spotify 컨테이너를 어떻게 시작하는지 봅니다.


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


주목하실 것입니다


docker run -it \
-v /tmp/.X11-unix:/tmp/.X11-unix \ # X11 소켓 마운트
-e DISPLAY=unix$DISPLAY \ # 디스플레이 전달
--device /dev/snd \ # 사운드
--name spotify \
jess/spotify

또는 Chrome의 경우, 끝에서

도커 실행 -it \
--net host \ # 영혼까지
--cpuset-cpus 0 \ # cpu 제어
--memory 512mb \ # 최대로 사용할 메모리
-v /tmp/.X11-unix:/tmp/.X11-unix \ # X11 소켓 마운트
-e DISPLAY=unix$DISPLAY \ # 디스플레이 전달
-v $HOME/Downloads:/root/Downloads \ # 선택 사항, 근사해요
-v $HOME/.config/google-chrome/:/data \ # 상태 저장하려면
--device /dev/snd \ # 음성이 있어요
--name chrome \
jess/chrome

답변 2

Docker는 맥 OS Yosemite에서 컨테이너 내에서 소리를 재생하는 방법에 대해 알아보겠습니다. Docker는 애플리케이션을 가상화하여 개발과 배포를 용이하게 하기 위해 사용되는 플랫폼입니다. 일반적으로 Docker 컨테이너는 음악이나 오디오 재생과 같은 작업을 수행하기 위해 설계되지 않았지만, 소리 재생을 위한 몇 가지 방법이 있습니다.
첫 번째로, Docker 컨테이너에 접속하여 호스트 시스템의 소리 장치를 공유할 수 있습니다. 호스트 시스템의 소리 장치를 컨테이너에 공유하기 위해 PulseAudio 데몬을 사용할 수 있습니다. PulseAudio는 리눅스에서 일반적으로 사용되는 사운드 서버이며 Docker 컨테이너에서도 실행될 수 있습니다. Docker 컨테이너에서 PulseAudio를 사용하려면 먼저 PulseAudio 서버를 실행해야 합니다.
먼저, 맥 OS Yosemite에서 Homebrew를 사용하여 PulseAudio를 설치해야 합니다. 터미널을 열고 다음 명령을 실행합니다.
```
brew install pulseaudio
```
이제 PulseAudio 서버를 실행해야 합니다. 다음 명령을 터미널에 입력하여 PulseAudio 서버를 실행합니다.
```
pulseaudio --load=module-native-protocol-tcp --exit-idle-time=-1 --daemon
```
이제 Docker 컨테이너를 실행할 준비가 되었습니다. Dockerfile을 작성하고 컨테이너를 빌드하십시오. 예를 들어, 다음과 같은 Dockerfile을 작성할 수 있습니다.
```Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y pulseaudio
ENV PULSE_SERVER tcp:host.docker.internal:4713
CMD [bash]
```
위의 Dockerfile에서는 우분투를 사용하여 Docker 컨테이너를 설정하고, PulseAudio를 설치합니다. 환경 변수로 PULSE_SERVER를 설정하여 호스트 시스템의 PulseAudio 서버에 연결합니다. 컨테이너가 실행될 때 이 명령이 실행됩니다.
이제 Docker 컨테이너를 빌드하려면 터미널에서 다음 명령을 실행합니다.
```
docker build -t sound-container .
```
이제 Docker 컨테이너를 실행하려면 다음 명령을 실행합니다.
```
docker run -it --rm --network host --env PULSE_SERVER=docker.for.mac.localhost sound-container
```
위의 명령에서는 호스트 시스템의 네트워크를 사용하고, PULSE_SERVER 환경 변수를 컨테이너 내부에서 사용 가능하도록 설정합니다. sound-container는 앞서 빌드한 Docker 이미지의 이름입니다.
이제 Docker 컨테이너 내에서 소리를 재생할 수 있습니다. 컨테이너 내에 있는 애플리케이션에서 소리를 재생하는 방법은 애플리케이션에 따라 다를 수 있습니다. 하지만 위의 설정을 통해 컨테이너에서 호스트 시스템의 소리 장치를 공유할 수 있으므로 적절한 애플리케이션을 사용하여 소리를 재생할 수 있습니다.
이렇게 Docker 컨테이너에서 맥 OS Yosemite에서 소리를 재생하는 방법에 대해 알아보았습니다. Docker 컨테이너에서 PulseAudio를 사용하여 호스트 시스템의 소리 장치를 공유할 수 있습니다. 이를 통해 소리 재생이 필요한 환경에서도 Docker를 사용할 수 있습니다.
(Word count: 399)

반응형
Comments