2016-09-27 4 views
0

Я использую Докер на малине. Я хочу получить доступ к линиям GPIO из контейнера в качестве пользователя (а не как root).Импортировать группу хозяев в контейнер Докера

Raspberry run raspbian 8.0.

Глядя на содержание /sys/class на хосте:

[email protected]:~ $ ls -al /sys/class/ 
total 0 
[...] 
drwxrwx--- 2 root gpio 0 Sep 27 19:05 gpio 
[...] 

Папка принадлежит к группе GPIO.

Когда я запускаю мой контейнер таким образом:

docker run -it --privileged container-name bash 

Пользователь не может получить доступ к папке GPIO:

[email protected]:/# su user 
[email protected]:/$ ls /sys/class/gpio/ 
ls: cannot open directory /sys/class/gpio/: Permission denied 

Даже если пользователь входит в группу GPIO, потому что я создал группа в файле Docker и назначила ее моему пользователю:

[email protected]:/$ groups user 
user : user gpio fuse 

Это потому, что по какой-то причине t Группа gpio потеряна:

[email protected]:/# ls -al /sys/class/ 
total 0 
[...] 
drwxrwx--- 2 root 997 0 Sep 27 19:05 gpio 
[...] 

Как сделать контейнер распознающим группу?

Как обходной путь, я могу изменить /etc/group, чтобы группа gpio соответствовала соответствующему UID. Проблема в том, что UID группы gpio может измениться при следующей установке raspbian на малину.

Любой способ динамически создать группу gpio или получить GID хоста gpio в файле Dockerfile?

ответ

0

В итоге я добавил startup.sh, когда контейнер запущен. Dockerfile:

ADD startup.sh /root/ 
RUN chmod +c /root/startup.sh 
CMD bash -c startup.sh ; bash 

startup.sh:

#!/bin/bash 

# Change local gpio group GID to the host gpio group GID so use jedi has access to /sys/class/gpio 
sed -r "s/gpio:([^:]*):[0-9]*/gpio:\1:$(grep gpio ~/host/etc/group | awk -F ':' '{ print $3 }')/g" /etc/group > /tmp/group 
mv /tmp/group /etc/group 

и смонтировать папку, /etc таким образом:

Тогда я смонтировать узел/и т.д. папку в контейнер таким образом:

docker tun -it -v /etc/:/root/host/etc/ 

С этим группа gpio в контейнере имеет тот же GID, что и группа gpio на хосте и пользователь имеет доступ к линии gpio через файловую систему /sys/class/gpio.

Смежные вопросы