【问题标题】:Docker run - User group not working as expected?Docker 运行 - 用户组没有按预期工作?
【发布时间】:2017-12-05 20:45:58
【问题描述】:

我有一个通过串行端口 (/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 组的一部分?

当我使用 old 泊坞窗 (apt-get install docker-io, docker-engine) 时,它可以工作,但在更新到新的 Docker CE 后,它就停止工作了。

设置

  • Ubuntu 16.04.2 LTS 内核 4.4.0-83-generic。
  • Docker 版本:Docker 版本 17.06.0-ce,构建 02c1d87。

谢谢!

【问题讨论】:

  • 从容器内部,您的进程将无法看到您的主机 tc 的用户和组信息。这是因为容器将有自己的 /etc/passwd 和 /etc/group 文件,这可能与您的主机的文件不匹配。
  • 谢谢!我还尝试使用 --volume 选项安装这些文件,但它也不起作用。解决方案是将--group-add=dialout 传递给docker run 调用

标签: linux ubuntu docker user-permissions usergroups


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    相关资源
    最近更新 更多