访问码头工人容器内的相机

时间:2015-11-29 17:21:51

标签: docker

我不确定这是否可行,但有没有办法在Docker容器内访问我的相机?我没有使用外置摄像头,而是内置在我的Mac中。

4 个答案:

答案 0 :(得分:7)

我不确定标志量(-v)是最佳做法。

根据jfrazelle的github,为许多图形应用程序(如chromium,skype,spotify等)编写了许多Dockerfile和docker run的docker工程师,你应该使用的标志和参数是{{1} }。

答案 1 :(得分:0)

您可以尝试使用-v标志转发网络摄像头设备

这样的东西

sudo docker run -d -p 55555:22 --privileged -v /dev/video0:/dev/video0 testimage

要列出连接到USB的所有设备,请使用lsusb;列出连接到PCI的所有设备使用lspci

答案 2 :(得分:0)

HTML5视频作品

<video id="video" autoplay>
  No video support in your browser...
</video>

Java脚本

        <script type="text/javascript">
            window.URL =window.URL || window.webkitURL;

            // Get access to the camera!
            if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
                // Not adding `{ audio: true }` since we only want video now
                navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {
                    //video.src = window.URL.createObjectURL(stream);
                    video.srcObject = stream;
                    video.play();
                });
            }
        </script>

您可以通过以下方式进行测试

$ docker run -d -p 127.0.0.1:8000:8000 --name html5cam yassermog/html5_cam_docker 

然后 (http://localhost:8000

来源 https://github.com/yassermog/HTML5CamDocker

答案 3 :(得分:0)

在MacOS上,可能有些棘手:

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

    • 安装Virtual Box
    • 安装Virtual Box Extension pack
    • 安装Docker Toolbox(强烈建议阅读this,同时也建议先备份/usr/local/bin/docker*
      • 确保/usr/local/bin/docker/usr/local/bin/docker-compose链接到Docker桌面二进制文件(/Applications/Docker.app/Contents/Resources),而不是Docker Toolbox。
      • 测试一切仍然正常:docker ps -adocker images应该显示您在Docker Desktop中已经拥有的内容,docker-machine ls应该不会出现错误
  2. brew install socat

  3. brew install xquartz

  4. 设置:“ XQuartz首选项”>“安全性”>选中“全部允许”(允许来自网络客户端的连接)

  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. 共享文件夹>添加>文件夹路径= /和文件夹名称=主机根
  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,双击您的VM,这将打开系统视图,然后单击“设备”>“网络摄像头”>“ <选择您的摄像头>)

您现在应该可以在容器中访问相机了。

使用

测试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

提示

使用VBoxManage controlvm thevm acpipowerbutton

关闭贪婪的VM进程

非常感谢:

附加说明: