我有一个通过串口(/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 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
之后,这已停止工作。
设置:
谢谢!
答案 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映像时,它将覆盖该设置。