我有一个通过串行端口( /dev/ttyUSB0 )进行通信的脚本。我想从 Docker 镜像中运行它。但是,我似乎无权从图像中执行此操作。我按照以下步骤操作:

在我的主机上,如果我运行 ln -l /dev/ttyUSB0 我得到:

crw-rw---- 1 root dialout 188, 0 jul  2 14:34 /dev/ttyUSB0

好的,这意味着为了读/写它,我需要成为 rootdialout 组的一部分。

我在我的主机中成为这个组的成员:
$ 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 run 调用。但是,请注意,当使用提供使用环境变量(通常是 -e PUID=<UID> -e PGID=<GID> )指定用户和组的 docker 图像时, 它会覆盖该设置

    关于linux - Docker 运行 - 用户组未按预期工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44871049/

    10-11 15:45
    查看更多