use*_*113 7 linux ubuntu usergroups user-permissions docker
我有一个通过串行端口 ( ) 进行通信的脚本/dev/ttyUSB0。我想从 Docker 映像中运行它。但是我似乎没有权限从图像中执行此操作。我按照以下步骤操作:
在我的主机上,如果我运行ln -l /dev/ttyUSB0我会得到:
crw-rw---- 1 root dialout 188, 0 jul 2 14:34 /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)
很好,这意味着为了读/写它,我需要成为root或 组的一部分dialout。
我成为我的主机中该组的成员:
$ sudo usermod -aG dialout $(whoami)
Run Code Online (Sandbox Code Playgroud)
然后我注销并再次登录以使其生效。
之后,我验证我可以与/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>
Run Code Online (Sandbox Code Playgroud)
然后它抱怨:
can't open device "/dev/ttyUSB0": Permission denied
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用:--user=1000:20,那么它工作正常。团体20就是dialout团体。
现在我的问题是:
为什么 Docker 不明白我的用户 (1000) 和组 (1000) 是该dialout组的一部分?
当我使用旧的docker ( apt-get install docker-io, docker-engine) 时,这是有效的,但更新到新的后,Docker CE它就停止工作了。
设置:
谢谢!
小智 2
正如评论中所述,解决方案是传递--group-add=dialout给 docker run 调用。-e PUID=<UID> -e PGID=<GID>但是,请注意,当使用 docker 映像时,它提供了一种使用环境变量(通常)指定用户和组的方法,它会覆盖该设置。
| 归档时间: |
|
| 查看次数: |
5193 次 |
| 最近记录: |