zajęło mi trochę czasu, dopóki nie dowiedział się, co jest potrzebne. (Ubuntu)
zaczynamy polecenia uruchomienia doker docker run -ti --rm myContainer sh -c "echo run something"
ALSA:
musimy /dev/snd
i jakiś dostępu do sprzętu, jak to wygląda. kiedy kładziemy to razem mamy
docker run -ti --rm \
-v /dev/snd:/dev/snd \
--lxc-conf='lxc.cgroup.devices.allow = c 116:* rwm' \
myContainer sh -c "echo run something"`
w nowych wersjach Döcker bez lxc flagi ty powinien użyj:
docker run -ti --rm \
-v /dev/snd:/dev/snd \
--privileged \
myContainer sh -c "echo run something"`
PulseAudio:
Tutaj musimy w zasadzie /dev/shm
, /etc/machine-id
i /run/user/$uid/pulse
. Ale to nie wszystko (być może ze względu na Ubuntu i sposób, w jaki robili to w przeszłości). Zmienna środowiskowa musi być taka sama w systemie hosta i w kontenerze dokowania. Możesz także potrzebować /var/lib/dbus
, ponieważ niektóre aplikacje uzyskują dostęp do identyfikatora komputera (może to być tylko dowiązanie symboliczne do "prawdziwego" identyfikatora komputera). I przynajmniej możesz potrzebować ukrytego folderu domowego ~/.pulse
dla niektórych danych tymczasowych (nie jestem tego pewien).
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"
W nowych wersjach Döcker może trzeba dodać --privileged
.
Oczywiście można łączyć zarówno ze sobą i używać go razem z xServer
ui spedycji jak tutaj: https://stackoverflow.com/a/28971413/2835523
Wystarczy wspomnieć:
- można obsługiwać większość to (wszystko bez używane id) w
dockerfile
- użyciu
uid=$(id -u)
aby uzyskać identyfikator użytkownika i gid z id -g
- tworzeniu użytkownika Döcker z tym id
utworzyć skrypt użytkownika:
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
Niestety, opcja --lxc-conf został usunięty w 2014 r https://github.com/docker/docker/ pull/5797 – tudor
Nie testowałem tego, ale myślę, że są zamienniki dla parametru. - uprzywilejowane, --cap-add, -cgroup-parent i --device może pracować –
-v/dev/snd:/dev/snd --privileged działa! Sprawdź: https://github.com/pwasiewi/docker-freeciv-client – 42n4