【问题标题】:Docker for GUI-based environments on windowsDocker 用于 Windows 上基于 GUI 的环境
【发布时间】:2020-09-12 10:20:21
【问题描述】:

我正在尝试为 opencv 社交距离检测项目制作一个 dockerfile 作为学校项目的要求

我遇到的问题是让 docker 在基于 GUI 的环境中运行

不知何故,我设法通过在运行命令中添加同伴行使其在 linux 上运行

-e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:ro

完整的命令

sudo docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:ro 社交距离检测 -y https://youtu.be/hTUyzF4v9KA

但它在 Windows 上不起作用

我应该将哪个命令添加到 docker run 以便它可以在 Windows 上运行? 有没有办法让它甚至可以在不添加任何额外行的情况下工作?

有 Dockerfile

FROM ubuntu:20.04
FROM python:3.8

LABEL maintainer="muhammed akyuzlu ***@gmail.com"

ADD Social-distance-detection.py / 
ADD coco.names / 
ADD yolov4.cfg /    
ADD yolov4.weights /  




RUN apt-get update \
    && apt-get install -y \
    python3-pyqt5 \
    build-essential \
    cmake \
    git \
    wget \
    unzip \
    yasm \
    pkg-config \
    libswscale-dev \
    libtbb2 \
    libtbb-dev \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libavformat-dev \
    libpq-dev \
    xserver-xephyr\
    && rm -rf /var/lib/apt/lists/*

RUN apt-get update -y \ 
    && apt-get install python3-pip -y \
    && pip install pafy \
    && pip install numpy  \
    && pip install youtube-dl \
    && pip install numpy \
    && pip install opencv-python 


ENTRYPOINT ["python","./Social-distance-detection.py"] 

这是我第一次使用 Docker,所以你可以找到一些废话:)

【问题讨论】:

  • 我不认为这真的有效(虽然不能权威地说):既然你运行的是 Linux 容器,你需要一个兼容 Linux(X Window System)的显示系统,甚至然后设置相当挑剔。六个SO Docker Windows tkinter questions 基本上没有答案。你能在原生 Windows Python 上运行它,使用虚拟环境进行包隔离吗?
  • 如何在本机 Windows Python 上运行它?我需要更改 Dockerfile 中的某些内容吗?
  • 完全删除 Dockerfile,安装 Python,并使用它来运行您的交互式 GUI 应用程序(没有 Docker)。
  • 关于无意义的行 - 一个接一个地使用两行 FROM 是没有意义的 - 第一个基本上被忽略了,你的实际基础映像也已经安装了 Python,所以安装系统版本是非常糟糕的主意 - 你不知道你实际使用的是哪一个。最后,你永远不应该有两个RUN指令一个接一个,而是把所有东西都放在一个。
  • @DavidMaze 首先谢谢你其次我很想不安装 docker 并使用它,但正如我提到的那样,这是一个学校项目,他们要求在 docker 容器中现在我需要解释如何安装我的文档中的 X Window Server

标签: docker opencv xserver


【解决方案1】:

首先,清理您的 Dockerfile。我建议:

FROM python:3.8

LABEL maintainer="muhammed akyuzlu ***@gmail.com"

COPY Social-distance-detection.py / 
COPY coco.names / 
COPY yolov4.cfg /    
COPY yolov4.weights /  

RUN apt-get update && \
    apt-get -y install \
    build-essential \
    cmake \
    git \
    wget \
    unzip \
    yasm \
    pkg-config \
    libswscale-dev \
    libtbb2 \
    libtbb-dev \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libavformat-dev \
    libpq-dev \
    xserver-xephyr && \
    apt-get -y clean && \
    rm -rf /var/lib/apt/lists/* && \
    pip install --no-cache-dir pafy \
    numpy  \
    youtube-dl \
    PyQt5 \
    opencv-python 

ENTRYPOINT [ "python" , "./Social-distance-detection.py" ] 

我不会重复我对您的问题的评论,但至于其他更改 - 您应该使用 COPY,而不是 ADD,除非您需要特定于 ADD 的功能。您应该只运行一次apt-get install,然后清理所有临时文件和缓存。您应该运行 pip--no-cache-dir 开关,以避免首先创建不必要的缓存。

现在是您的实际问题。正如@David Maze 建议的那样,您需要安装 X Window Server,然后将其配置为接受所有连接并最终运行:

docker run -e DISPLAY=192.168.1.68:0.0 social-distance-detection -y https://youtu.be/hTUyzF4v9KA

192.168.1.68 替换为您主机的 IP 地址。

过程在this article中有详细描述。

【讨论】:

  • 非常感谢你们在我的 ubuntu 20.04 中的一个小问题我可以在 gpu 上运行 opencv 我可以让它在容器内的 gpu 上运行吗?让它在 ubuntu 上运行并不是一篇文章,你需要安装 cuda 和 cmake vb。
  • 我有一个 cv2.so 如果有帮助的话
  • 如果您的主机系统是 Linux:datamachines.io/blog/… 或 Windows 的 beta 版本,并且如果您通过 WSL 2 而不是 Hyper-V 运行 Docker 守护程序,则有可能:docs.nvidia.com/cuda/wsl-user-guide/index.html#installing-wip。不过,这不是我的专业领域,所以如果您在运行它时遇到问题,我将无法提供帮助。
猜你喜欢
  • 2014-07-28
  • 2018-03-10
  • 2018-05-13
  • 1970-01-01
  • 2022-10-20
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多