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

时间:2017-07-02 12:56:32

标签: linux ubuntu docker user-permissions usergroups

我有一个通过串口(/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 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,那么它可以正常工作。群组20dialout群组。

现在我的问题:

为什么Docker不明白我的用户(1000)和群组(1000)属于dialout群组?

当我使用 docker(apt-get install docker-io, docker-engine)时,这是有效的,但在更新到新的Docker CE之后,这已停止工作。

设置

  • Ubuntu 16.04.2 LTS Kernel 4.4.0-83-generic。
  • Docker版本:Docker版本17.06.0-ce,build 02c1d87。

谢谢!

1 个答案:

答案 0 :(得分:0)

如评论中所述,解决方案是将 async function getResponse() { response_ = 'Response_ pending' console.log('response_ initialisation: ', response_) response_ = await ipcRenderer.invoke('responseChan') //After calling .invoke, //getResponse returns with response_ set to the unresolved promise console.log('"Awaited" response_: ', response_) //Succeeding code executes //return response_ //asynchronously, on resolution of the promise switch (response_) { //This switch statement, which failed on case 'Stby': //unresolved promise when coded in line with args = [0, 'CAM_Power', 'On'] //call to getResponse, works here, since it response = executeCommand(args) //executes only when the promise is resolved! console.log('Switch stmt recognized: Camera 1 powered and selected') break; 传递给docker run调用。但是,请注意,使用提供了一种使用环境变量(通常为--group-add=dialout)指定用户和组的方式的docker映像时,它将覆盖该设置