Docker 运行 - 用户组未按预期工作?

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它就停止工作了。

设置

  • Ubuntu 16.04.2 LTS 内核 4.4.0-83-通用。
  • Docker 版本:Docker 版本 17.06.0-ce,内部版本 02c1d87。

谢谢!

小智 2

正如评论中所述,解决方案是传递--group-add=dialout给 docker run 调用。-e PUID=<UID> -e PGID=<GID>但是,请注意,当使用 docker 映像时,它提供了一种使用环境变量(通常)指定用户和组的方法,它会覆盖该设置