我有一个通过串行端口( /dev/ttyUSB0
)进行通信的脚本。我想从 Docker 镜像中运行它。但是,我似乎无权从图像中执行此操作。我按照以下步骤操作:
在我的主机上,如果我运行 ln -l /dev/ttyUSB0
我得到:
crw-rw---- 1 root dialout 188, 0 jul 2 14:34 /dev/ttyUSB0
好的,这意味着为了读/写它,我需要成为
root
或 dialout
组的一部分。我在我的主机中成为这个组的成员:
$ sudo usermod -aG dialout $(whoami)
然后我注销并再次登录以使其生效。
之后,我验证我可以与来自我的主机的
/dev/ttyUSB0
完美通信。但是,如果我运行 docker 镜像:docker run --user=1000:1000 --rm=true --tty=true --privileged=true --device=/dev/ttyUSB0 --volume=<my_dir>:<my_dir> --workdir=<my_dir> <my_docker_image> <my_script>
然后它提示:
can't open device "/dev/ttyUSB0": Permission denied
但是,如果我使用:
--user=1000:20
,那么它工作正常。 20
组是 dialout
组。现在我的问题:
为什么 Docker 不明白我的用户 (1000) 和组 (1000) 是
dialout
组的一部分? 当我使用旧的 docker (
apt-get install docker-io, docker-engine
) 时,这是有效的,但在更新到新的 Docker CE
后,它停止工作。设置 :
谢谢!
最佳答案
如评论中所述,解决方案是将 --group-add=dialout
传递给 docker run 调用。但是,请注意,当使用提供使用环境变量(通常是 -e PUID=<UID> -e PGID=<GID>
)指定用户和组的 docker 图像时, 它会覆盖该设置 。
关于linux - Docker 运行 - 用户组未按预期工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44871049/