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



我有一个通过串行端口(/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后,它停止工作。

设置

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

谢谢!

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

相关内容

  • 没有找到相关文章

最新更新