본문 바로가기

IT/리눅스

(3) docker 컨테이너에서 host 오디오 디바이스 사용하기(host alsa access, host audio device)

반응형

Docker 컨테이너 내에서 호스트의 ALSA(Advanced Linux Sound Architecture)를 직접 제어하려면 몇 가지 설정 및 권한 조정이 필요합니다.

ALSA는 호스트 및 컨테이너 간에 공유할 수 있는 특정 디바이스 파일에 의존하기 때문에 권한 문제와 디바이스 파일의 마운트가 필요합니다. 

 

혹시 명령어가 없다면 다음을 설치(우분투)

apt-get install alsa-utils 

 

(참고) https://yongeekd01.tistory.com/110

 

(2) 리눅스 오디오 장치 확인 및 소리 재생 하기 (console, alsa, speaker-test, aplay, amixer)

1. 현재 시스템에서 인식되고 있는 오디오 출력 장치 확인 하기 > aplay -l 이 명령어는 현재 연결된 오디오 출력 장치 목록을 보여줍니다. 혹시 명령어가 없다면 다음을 설치해주세요. (우분투) apt-

yongeekd01.tistory.com

 

 

1. 호스트에서 ALSA 설정 확인

 

호스트에서 사용 중인 ALSA 디바이스 파일을 확인합니다. 이 디바이스 파일은 /dev/snd 디렉토리에 있습니다.

 

호스트에서 먼저 제대로 alsa가 제대로 설치 밎 구동이 되고 있는지 wave 파일 하나를 재생해서 연결된 스피커에서 제대로 재생되는 지 확인합니다

 

> aplay   xxx.wav

재생 WAVE 'female_16000.wav' : Signed 16 bit Little Endian, 16000 Hz 비율, 스테레오

 

2. 도커 컨테이너 생성 시 --device 권한 부여하기 

 

Docker 컨테이너에서 호스트의 ALSA에 액세스하려면 --device 플래그를 사용하여 ALSA 디바이스 파일을 마운트하고 컨테이너 내에서 사용자에게 필요한 권한을 부여해야 합니다.

 

아래의 예제에서는 호스트의 /dev/snd 디렉토리를 컨테이너 내의 /dev/snd 디렉토리에 마운트하고 컨테이너 내의 사용자에게 ALSA 그룹 권한을 부여하는 방법 입니다. 

 

--device=/dev/snd:/dev/snd  을 추가해주세요.

 

docker run --runtime=nvidia --shm-size=1024m -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=all --net=host --device=/dev/snd:/dev/snd -i -t -v /etc/localtime:/etc/localtime:ro --name=my_container_name  my_image_name  /bin/bash

 

3. 생성한 컨테이너 내부에서 aplay 실행 해보기 

 

컨테이너 내부에 /dev/snd 위치에 동일한 파일들이 잘 연결되었다면 문제 없이 alsa tools를 사용할 수 있어야 합니다. 

 

> aplay   xxx.wav

재생 WAVE 'female_16000.wav' : Signed 16 bit Little Endian, 16000 Hz 비율, 스테레오

 

정상적으로 동작됩니다.

 

반응형