我有一台Docker机器,我正在安装OpenCV 2.4.11
然而,发生了一个错误,我确实找到了解决方案,但这是暂时的。
当我运行使用cv2
的Python脚本时,抛出此错误消息:
Error: libdc1394 error: Failed to initialize libdc1394
我看到这是解决我问题的唯一线程,但是暂时: ctypes error: libdc1394 error: Failed to initialize libdc1394
我将以下行添加到Dockerfile
,但这并未影响我的VM。
RUN ln /dev/null /dev/raw1394
但是,如果我在VM运行时输入该命令(docker run -it ...
),它确实可以正常运行!但是,这并没有解决我的问题,因为我需要它在启动时没问题,如果我重新进入VM,问题就会出现。
我的Dockerfile:
# Pull base image.
FROM library/ubuntu
MAINTAINER Ivan Seidel <ivanseidel@gmail.com>
RUN apt-get update
#
# Python
#
RUN apt-get install -y python python-dev python-pip python-virtualenv
#
# Node.js and NPM
#
RUN apt-get install -y nodejs nodejs-legacy npm git --no-install-recommends
#
# Install OpenCV
#
RUN apt-get install -y python-opencv --no-install-recommends
RUN ln /dev/null /dev/raw1394
#
# Clear cache
#
RUN rm -rf /var/lib/apt/lists/*
#
# Specific data
#
EXPOSE 80
COPY . /data
WORKDIR /data
RUN npm install --production
CMD ["bash"]
答案 0 :(得分:5)
好。我花了整整一天时间。
基本上,/dev/raw1394
和/dev/null
之间的链接不是永久性的。你可以打入你的虚拟机,拨打ln /dev/null /dev/raw1394
,但它只会在你重新启动容器之前持续。
我必须做的,似乎是最简单但不完美的方法,是在Container启动期间放置链接。
我认为将它作为一项服务运行,但对于一项简单的工作似乎太过分了。
我最终开始工作的方式(它不漂亮,但有效),是通过更改Dockerfile的CMD
:
CMD sh -c 'ln -s /dev/null /dev/raw1394'; <your-script-here>
答案 1 :(得分:2)
当我将python命令从python2更改为python3时,我遇到了同样的问题。我在Dockerfile中的一行:
RUN ln -sf /usr/bin/python3 /usr/bin/python
每次以容器的形式重新生成新映像时,我都必须手动更改链接。
我尝试在Dockerfile中将命令用作RUN的 execform ,这解决了我的问题:
RUN ["ln", "-sf", "/usr/bin/python3", "/usr/bin/python"]
现在,python3从命令 python 开始,而无需手动设置链接。
答案 2 :(得分:1)
当我使用opencv python容器时遇到了同样的问题。
我试图添加&#34; ln / dev / null / dev / raw1394&#34;在ubuntu的许多文件中,为了在容器启动时运行它,但都失败了。
然后我找到了 - docker run命令的设备。
所以我们可以使用:
docker run --device /dev/null:/dev/raw1394 ...
它适用于我的容器。
实际上,每次运行时输入--device / dev / null:/ dev / raw1394都是非常有意义的。但我找不到在Dockerfile中设置设备的方法。
答案 3 :(得分:0)
我将链接创建添加到我为应用程序服务使用的docker-compose.yml文件的command:
中。看起来像
version: '3'
services:
thumbor:
build: .
ports:
- 8888:8888
command: bash -c "ln /dev/null dev/raw1394 && thumbor"
ln
命令仅在docker-compose up
上运行,而不在docker-compose run --rm app bash
上运行。
我从this answer获得了bash -c
。