Невозможно установить / запустить Docker с OpenCV

Я использую код ниже в 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 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

1 ответ

Чтобы запустить opencv в Docker-контейнере, вам нужно установить несколько дополнительных двоичных файлов из apt-get. Поскольку вы просто обновляете и обновляете двоичные файлы, они не установлены в вашей системе.

Но вместо того, чтобы устанавливать их вручную, я настоятельно рекомендую вам использовать образ докера с предустановленным и работающим python3 и opencv, как этот образ докера: https://hub.docker.com/r/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] .Пожалуйста, замените [имя-изображения] на имя, которое вы хотите, чтобы изображение было. Наконец, чтобы запустить контейнер, используйте эту команду: docker run [image-name]:latest

Теперь вы сможете импортировать cv2 из вашего файла app.py, как import cv2,

Я была такая же проблема. Это происходит из-за зависимостей времени выполнения. Добавьте следующий фрагмент кода в свой DockerFile, чтобы установить зависимости времени выполнения.

Установите зависимости времени выполнения OpenCV

ЗАПУСК apt-get update ЗАПУСК apt-get -y install libglib2.0-0 ЗАПУСК apt-get -y install libsm6 \ libxrender-dev \ libxext6

У меня была такая же проблема, и я решил ее, выполнив следующие действия.

  1. Используемый образ докера jjanzic/docker-python3-opencv
  2. В Dockerfile удалена строка для создания виртуальной среды python (например, созданной с помощью venv). Другой способ - скопировать папку cv2 в расположение пакетов виртуальной среды.
  3. Удалена версия numpy из файла requirements.txt (это позволяет избежать любого возможного конфликта с версией numpy, требуемой opencv)
  4. Удален opencv-python из файла requirements.txt.

Надеюсь это поможет.

Другие вопросы по тегам