如何在带有docker Desktop的MacOS上连接和使用docker容器中的相机

如何在带有docker Desktop的MacOS上连接和使用docker容器中的相机,macos,docker,camera,webcam,docker-machine,Macos,Docker,Camera,Webcam,Docker Machine,关于如何做到这一点,有很多教程,但我必须更改一些内容,使其在macOS Catalina 10.15.7上工作,因此我想与大家分享最终使相机在docker容器中与docker Desktop for Mac一起工作所需的一切 注意:docker机器操作可能需要一段时间,请耐心等待:) 注2:仅使用内置摄像头进行测试 在Mac(使用Oracle Virtual Box)上为docker Desktop安装旧版docker虚拟化引擎 安装 安装 安装(强烈建议阅读并在安装之前备份您的/usr/lo

关于如何做到这一点,有很多教程,但我必须更改一些内容,使其在macOS Catalina 10.15.7上工作,因此我想与大家分享最终使相机在docker容器中与docker Desktop for Mac一起工作所需的一切

注意:docker机器操作可能需要一段时间,请耐心等待:)

注2:仅使用内置摄像头进行测试

  • 在Mac(使用Oracle Virtual Box)上为docker Desktop安装旧版docker虚拟化引擎

    • 安装
    • 安装
    • 安装(强烈建议阅读并在安装之前备份您的
      /usr/local/bin/docker*
      • 确保
        /usr/local/bin/docker
        /usr/local/bin/docker compose
        链接到docker桌面二进制文件(
        /Applications/docker.app/Contents/Resources
        ),而不是docker工具箱
      • 测试一切仍在工作:
        docker ps-a
        docker图像
        应显示docker桌面中已有的内容,
        docker机器ls
        不应引发错误
  • brew安装socat

  • brew安装xquartz

  • 设置:XQuartz首选项>安全性>检查允许全部(允许从网络客户端连接)

  • defaults write org.macosforge.xquartz.X11 enable_iglx-bool true

  • IP=$(ifconfig en0 | grep inet | awk'$1==“inet”{print$2}')

  • xhost+$IP

  • docker machine create-d virtualbox--virtualbox cpu计数=4--virtualbox内存=4096--virtualbox磁盘大小=1000000--virtualbox-boot2docker-urlhttps://github.com/gzupark/boot2docker-webcam-mac/releases/download/18.06.1-ce-usb/boot2docker.iso 默认值

  • docker机器停止默认值

  • 打开虚拟箱应用程序&配置刚刚使用docker机器创建的VirtualBox虚拟机

  • 显示>视频内存(最大值)
  • 显示>加速>启用三维加速(检查)
  • 端口>USB>启用USB控制器(选中)>USB 2.0(选择)
  • 共享文件夹>添加>文件夹路径=/&文件夹名称=主机根
  • 重新启动macOS

  • 打开一个终端(T1),然后键入

  • 打开-一个XQuartz
  • 如果未打开另一个终端,请关注XQuartz应用程序和应用程序>终端
  • 现在,新的终端已打开(T2
  • T2
    socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\“$DISPLAY\”
    • 如果它抱怨“地址已在使用”,请使用
      lsof-i tcp:6000
      检查所属进程是否为X11.bin,否则请终止所属进程并再次尝试运行socat(始终打开T2
  • 再次打开T1

    • IP=$(ifconfig en0 | grep inet | awk'$1==“inet”{print$2}')
    • xhost+$IP
    • docker机器启动默认值
    • eval$(docker机器环境默认值)
    • vboxmanage列表网络摄像头
      • 在列表中确认您的网络摄像头(例如我的是
        .1
    • vboxmanage controlvm默认网络摄像头连接。1
  • (您可能需要再次打开VirtualBox,双击您的虚拟机,这将打开系统视图,然后单击设备>网络摄像头>)

  • 现在,您应该能够访问容器中的相机

    使用

    docker run --rm -it -e DISPLAY=$IP:0 gns3/xeyes
    
    docker run --rm -it -e DISPLAY=$IP:0 --device=/dev/video0:/dev/video0 -v /tmp/.X11-unix:/tmp/.X11-unix ubuntu
    apt update && apt install -y streamer
    streamer -f jpeg -o image.jpeg
    
    使用

    docker run --rm -it -e DISPLAY=$IP:0 gns3/xeyes
    
    docker run --rm -it -e DISPLAY=$IP:0 --device=/dev/video0:/dev/video0 -v /tmp/.X11-unix:/tmp/.X11-unix ubuntu
    apt update && apt install -y streamer
    streamer -f jpeg -o image.jpeg
    
    提示

    使用以下按钮关闭贪婪的虚拟机进程:
    vboxmanagecontrolvm-thevm-acpipowerbutton

    非常感谢:

    附加说明:


    …问题是什么?同意,这将更好地回答一个被问得很好的问题。我投票结束这个问题,因为用户陈述了一个答案(但没有问题)。我想分享我认为可以帮助他人的信息。你会推荐什么来正确地发布这篇文章?我发布了以下问题的答案,我认为这些问题可以从这个解决方案中受益,因此,如果你认为这是一个坏主意,我们可以关闭这篇文章。谢谢你的帮助。。。问题是什么?同意,这将是一个很好的问题的答案。我投票结束这个问题,因为用户陈述了一个答案(但没有问题)。我想分享这个信息,我认为可以帮助其他人。你会推荐什么来正确地发布这篇文章?我发布了以下问题的答案,我认为这些问题可以从这个解决方案中受益,因此,如果你认为这是一个坏主意,我们可以关闭这篇文章。谢谢你的帮助。