我在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
答案 0 :(得分:0)
为了在docker容器中运行opencv,您需要从apt-get安装some additional binaries。由于您只是更新和升级二进制文件,因此您没有在系统上安装它们。
但是,我强烈建议您使用预先安装并正常工作并已安装python3和opencv的docker3镜像,而不是手动安装它们,例如此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
一样。
答案 1 :(得分:0)
我遇到了同样的问题,并通过以下步骤解决了该问题。
希望这会有所帮助。
答案 2 :(得分:0)
我有同样的问题。它是由于运行时相关性而发生的。在您的DockerFile中添加以下代码片段以安装运行时依赖项。
运行apt-get更新 运行apt-get -y install libglib2.0-0 运行apt-get -y install libsm6 \ libxrender-dev \ libxext6