首页 > 解决方案 > 如何使用 Docker Desktop 在 MacOS 上的 docker 容器中连接和使用摄像头

问题描述

有几个关于如何做到这一点的教程,但我必须更改一些位以使其在我的 macOS Catalina 10.15.7 上工作,所以我想与大家分享最终让相机在 docker 容器中工作的确切必要条件适用于 Mac 的 Docker 桌面。

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

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

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

    • 安装虚拟盒子
    • 安装Virtual Box 扩展包
    • 安装Docker 工具箱(强烈推荐阅读这篇/usr/local/bin/docker*文章,也推荐备份你之前的内容)
      • 确保/usr/local/bin/docker/usr/local/bin/docker-compose链接到 Docker Desktop 二进制文件 ( /Applications/Docker.app/Contents/Resources),而不是 Docker Toolbox
      • 测试一切是否仍然有效:docker ps -a并且docker images应该显示您在 Docker Desktop 中已有的内容,docker-machine ls不应该引发错误
  2. brew install socat

  3. brew install xquartz

  4. 设置:XQuartz Preferences > Security > check allow all(允许来自网络客户端的连接)

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

  6. IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')

  7. xhost + $IP

  8. docker-machine create -d virtualbox --virtualbox-cpu-count=4 --virtualbox-memory=4096 --virtualbox-disk-size=1000000 --virtualbox-boot2docker-url https://github.com/gzupark/boot2docker-webcam-mac/releases/download/18.06.1-ce-usb/boot2docker.iso default

  9. docker-machine stop default

  10. 打开 Virtual Box 应用程序并配置刚刚使用 docker-machine 创建的 VirtualBox VM

    1. 显示 > 显存(最大)
    2. 显示 > 加速 > 启用 3D 加速(勾选)
    3. 端口 > USB > 启用 USB 控制器(选中)> USB 2.0(选择)
    4. 共享文件夹 > 添加 > 文件夹路径 = / & 文件夹名称 = host-root
  11. 重新启动 macOS

  12. 打开一个终端(T1),然后输入

    1. open -a XQuartz
    2. 如果它没有打开另一个终端,请关注 XQuartz 应用程序和应用程序 > 终端
    3. 现在打开了一个新终端(T2
    4. T2上:socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
      • 如果它抱怨“地址已在使用中”,请检查lsof -i tcp:6000拥有进程是否为 X11.bin,否则终止拥有进程并尝试再次运行 socat(始终在T2上)
  13. 再次上T1

    • IP=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
    • xhost + $IP
    • docker-machine start default
    • eval $(docker-machine env default)
    • vboxmanage list webcams
      • 在列表中识别您的网络摄像头(例如我的网络摄像头.1
    • vboxmanage controlvm default webcam attach .1
  14. (您可能需要再次打开 VirtualBox,双击您的虚拟机,这将打开您系统的视图,然后设备 > 网络摄像头 > <选择您的摄像头>)

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

测试 XQuartz

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

小费

使用以下命令关闭贪婪的 VM 进程:VBoxManage controlvm thevm acpipowerbutton

非常感谢:

补充说明:

标签: macosdockercamerawebcamdocker-machine

解决方案


推荐阅读