【发布时间】: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
很好,这意味着为了读取/写入它,我需要成为 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 组的一部分?
当我使用 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