macos - 如何使用 Docker Desktop 在 MacOS 上的 docker 容器中连接和使用摄像头
问题描述
有几个关于如何做到这一点的教程,但我必须更改一些位以使其在我的 macOS Catalina 10.15.7 上工作,所以我想与大家分享最终让相机在 docker 容器中工作的确切必要条件适用于 Mac 的 Docker 桌面。
注意:docker-machine 操作可能需要一段时间,请耐心等待 :)
注2:仅使用内置摄像头进行测试
在 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
不应该引发错误
- 确保
brew install socat
brew install xquartz
设置:XQuartz Preferences > Security > check allow all(允许来自网络客户端的连接)
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-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
docker-machine stop default
打开 Virtual Box 应用程序并配置刚刚使用 docker-machine 创建的 VirtualBox VM
- 显示 > 显存(最大)
- 显示 > 加速 > 启用 3D 加速(勾选)
- 端口 > USB > 启用 USB 控制器(选中)> USB 2.0(选择)
- 共享文件夹 > 添加 > 文件夹路径 = / & 文件夹名称 = host-root
重新启动 macOS
打开一个终端(T1),然后输入
open -a 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-machine start default
eval $(docker-machine env default)
vboxmanage list webcams
- 在列表中识别您的网络摄像头(例如我的网络摄像头
.1
)
- 在列表中识别您的网络摄像头(例如我的网络摄像头
vboxmanage controlvm default webcam attach .1
(您可能需要再次打开 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
非常感谢:
- https://github.com/GzuPark/boot2docker-webcam-mac
- https://medium.com/@jijupax/connect-the-webcam-to-docker-on-mac-or-windows-51d894c44468
- https://askubuntu.com/a/106773
- https://apple.stackexchange.com/a/277029
补充说明: