мне потребовалось некоторое время, пока я не узнал, что нужно. (Ubuntu)
мы начинаем с команды docker run docker run -ti --rm myContainer sh -c "echo run something"
ALSA:
нам нужен /dev/snd
и некоторый аппаратный доступ, как кажется. когда мы складываем это вместе, у нас есть
docker run -ti --rm \
-v /dev/snd:/dev/snd \
--lxc-conf='lxc.cgroup.devices.allow = c 116:* rwm' \
myContainer sh -c "echo run something"`
В новых версиях докеров без флагов lxc вы должны использовать это:
docker run -ti --rm \
-v /dev/snd:/dev/snd \
--privileged \
myContainer sh -c "echo run something"`
PULSEAUDIO: обновление
: может быть достаточно смонтировать сокет pulseaudio в контейнере с помощью опции -v. это зависит от вашей версии и предпочтительного метода доступа. см. другие ответы на метод сокета.
Здесь нам нужны в основном /dev/shm
, /etc/machine-id
и /run/user/$uid/pulse
. Но это еще не все (возможно, из-за Ubuntu и того, как они делали это в прошлом). Переменная окружения XDG_RUNTIME_DIR
должна быть одинаковой в хост-системе и в вашем докер-контейнере. Вам также может понадобиться /var/lib/dbus
, потому что некоторые приложения получают доступ к идентификатору машины отсюда (может содержать только символическую ссылку на «настоящий» идентификатор машины). И, по крайней мере, вам может понадобиться скрытая домашняя папка ~/.pulse
для некоторых временных данных (я не уверен в этом).
docker run -ti --rm \
-v /dev/shm:/dev/shm \
-v /etc/machine-id:/etc/machine-id \
-v /run/user/$uid/pulse:/run/user/$uid/pulse \
-v /var/lib/dbus:/var/lib/dbus \
-v ~/.pulse:/home/$dockerUsername/.pulse \
myContainer sh -c "echo run something"
В новых версиях докеров вам может потребоваться добавить --privileged
.
Конечно, вы можете объединить их вместе и использовать вместе с xServer
переадресацией пользовательского интерфейса, как здесь: https://stackoverflow.com/a/28971413/2835523
Просто упомяну:
- вы можете обработать большую часть этого (все без используемого идентификатора) в
dockerfile
- использование
uid=$(id -u)
для получения идентификатора пользователя и gid с помощью id -g
- создание пользователя докера с этим идентификатором
создать пользовательский скрипт:
mkdir -p /home/$dockerUsername && \
echo "$dockerUsername:x:${uid}:${gid}:$dockerUsername,,,:/home/$dockerUsername:/bin/bash" >> /etc/passwd && \
echo "$dockerUsername:x:${uid}:" >> /etc/group && \
mkdir /etc/sudoers.d && \
echo "$dockerUsername ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$dockerUsername && \
chmod 0440 /etc/sudoers.d/$dockerUsername && \
chown ${uid}:${gid} -R /home/$dockerUsername
person
A. Binzxxxxxx
schedule
11.03.2015