我正在尝试在特权的Docker容器中(作为用户)访问串口,但我得到了“权限被拒绝”的错误,尽管权限已经正确设置。以下是一个最小可重现示例(假设串口设备连接到/dev/ttyUSB0):
# start docker container with your user id, give it privileged access and mount /dev
docker run -itd --user $(id -u) --name test --privileged -v /dev:/dev ubuntu
# add user and add it to dialout (not sure if this is necessary as we have privileged access)
docker exec -it --user 0 test sh -c "groupadd -g $(id -g) user && useradd -m -u $(id -u) -g $(id -g) -G dialout user"
# install picocom to test serial connection
docker exec -it --user 0 test sh -c "apt update && apt install -y picocom"
# run picocom on /dev/ttyUSB0 to check if we can open it
docker exec -it test sh -c "picocom /dev/ttyUSB0"
但是当我尝试这样做时,出现了以下错误:
FATAL: cannot open /dev/ttyUSB0: Permission denied
在以root身份执行命令或在“docker run”命令中直接访问串行设备时,一切正常,但我需要能够从已经运行的容器中访问串行设备。
有人知道我缺少什么吗?
ps -Af
查看所有正在运行的进程。更改用户帐户后,需要重新登录或重启才能生效,以便将其添加到组中。 - sawdust$ docker exec -it test sh -c "ps -Af"
UID PID PPID C STIME TTY TIME CMD
user 1 0 0 13:42 pts/8 00:00:00 /bin/bash
user 296 0 0 13:47 pts/9 00:00:00 sh -c ps -Af
user 302 296 0 13:47 pts/9 00:00:00 ps -Af
- wilson1994ls -l /dev/ttyUSB*
,(2)检查谁在dialout组中(假设dialout是设备的组所有者):members dialout
,(3)检查当前用户:whoami
。 - sawdust