【问题标题】:Unable to install/run docker with opencv无法使用 opencv 安装/运行 docker
【发布时间】:2019-04-20 09:51:15
【问题描述】:

我在 Dockerfile 中使用下面的代码,它构建成功,但没有运行。我怎样才能让它工作?

FROM python:3.5-slim
COPY . /app
WORKDIR /app

RUN apt-get update
RUN apt-get -y upgrade

RUN pip install -r requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]

错误:

Traceback (most recent call last):
  File "app.py", line 7, in <module>
    from my_file.test import test
  File "/app/my_file/test.py", line 9, in <module>
    from imutils import contours
  File "/usr/local/lib/python3.5/site-packages/imutils/__init__.py", line 8, in <module>
    from .convenience import translate
  File "/usr/local/lib/python3.5/site-packages/imutils/convenience.py", line 6, in <module>
    import cv2
  File "/usr/local/lib/python3.5/site-packages/cv2/__init__.py", line 3, in <module>
    from .cv2 import *
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory

使用的 Docker 代码:

docker build -t flask-sample-one:latest .

docker run -d -p 5000:5000 flask-sample-one

需求文件:

opencv-contrib-python-headless==3.4.3.18
Click==7.0
cloudpickle==0.6.1
cycler==0.10.0
dask==0.20.1
decorator==4.3.0
Flask==1.0.2
imutils==0.5.1
itsdangerous==1.1.0
Jinja2==2.10
kiwisolver==1.0.1
MarkupSafe==1.1.0
networkx==2.2
numpy==1.15.4
Pillow==5.3.0
pyparsing==2.3.0
python-dateutil==2.7.5
PyWavelets==1.0.1
scikit-image==0.14.1
scipy==1.1.0
six==1.11.0
toolz==0.9.0
Werkzeug==0.14.1

【问题讨论】:

  • @KlausD。我收到此错误:
  • @KlausD。 E: 找不到包 libglib2.0-0 E: 找不到任何包 glob 'libglib2.0-0' E: 找不到任何包 正则表达式 'libglib2.0-0' 命令'/bin /sh -c apt-get install libglib2.0-0' 返回非零代码:100

标签: python docker opencv-contrib


【解决方案1】:

为了在 docker 容器中运行 opencv,您需要从 apt-get 安装 some additional binaries。由于您只是更新和升级二进制文件,因此您的系统上没有安装它们。

但我强烈建议您使用预安装了 python3 和 opencv 并正常工作的 docker 映像,而不是手动安装它们,例如这个 docker 映像:jjanzic/docker-python3-opencv

要启动并运行它,修改后的 Dockerfile 现在应该如下所示:

FROM jjanzic/docker-python3-opencv
COPY . /app
WORKDIR /app

RUN pip3 install -r requirements.txt
ENTRYPOINT ["python3"]
CMD ["app.py"]

要构建它,只需运行docker build -t [image-name] . 请将 [image-name] 替换为您希望图像具有的名称。最后,要运行容器,请使用以下命令: docker run [image-name]:latest

您现在应该可以从 app.py 文件中导入 cv2,就像 import cv2

【讨论】:

  • 我对 docker 很陌生。如果我运行此命令 docker run -it jjanzic/docker-python3-opencv python 之后如何运行和构建我自己的项目??
  • 另外,我在尝试安装时遇到上述错误:RUN apt-get install libglib2.0-0
  • 请告诉我怎样才能让它工作?从 1 周开始努力让它发挥作用!
  • 嘿,我已经更新了帖子,使其包含一个新的 Dockerfile。请尝试一下,它现在应该可以工作了
  • 我刚试过,但我得到了同样的错误!我复制粘贴了您的代码并运行了构建命令和 docker run。请帮帮我!
【解决方案2】:

我有同样的问题。它是由于运行时依赖性而发生的。在 DockerFile 中添加以下代码 sn-p 以安装运行时依赖项。

安装 OpenCV 的运行时依赖项

RUN apt-get update
RUN apt-get -y install libglib2.0-0
RUN apt-get -y install libsm6 \
     libxrender-dev \
     libxext6

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我使用以下步骤解决了它。

    1. 使用 docker 镜像 jjanzic/docker-python3-opencv
    2. 删除了 Dockerfile 中用于创建 python 虚拟环境的行(例如 使用 venv 创建的),另一种方法是将 cv2 文件夹复制到 虚拟环境包位置。
    3. 从 requirements.txt 文件中删除了 numpy 版本(这样可以避免与 opencv 所需的 numpy 版本发生任何可能的冲突)
    4. 从 requirements.txt 文件中删除了 opencv-python

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 2020-05-08
      相关资源
      最近更新 更多