繁体   English   中英

如何用Ubuntu在Docker中坚持'ln'

[英]How to persist 'ln' in Docker with Ubuntu

我有一台Docker机器,我正在安装OpenCV 2.4.11

但是,发生了一个错误,我确实找到了解决方案,但这是暂时的。

当我运行使用cv2 Python脚本时,抛出此错误消息:

Error: libdc1394 error: Failed to initialize libdc1394

我看到这是解决我的问题的唯一线程,但暂时: ctypes错误:libdc1394错误:无法初始化libdc1394

Dockerfile添加到我的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"]

好的。 我花了整整一天时间。

基本上, /dev/raw1394/dev/null之间的链接不是永久性的。 你可以打入你的虚拟机,调用ln /dev/null /dev/raw1394 ,但它只会持续到你重新启动容器。

我必须做的,似乎是最简单但不完美的方法是在Container启动期间放置链接。

我认为将它作为一项服务运行,但对于一项简单的工作似乎太过分了。

我最终开始工作的方式(它不漂亮,但有效),是通过更改Dockerfile的CMD

CMD sh -c 'ln -s /dev/null /dev/raw1394'; <your-script-here>

当我将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开头,没有手动设置链接。

当我使用opencv python容器时遇到了同样的问题。

我试图在ubuntu中的许多文件中添加“ln / dev / null / dev / raw1394”,以便在容器启动时运行它,但都失败了。

然后我找到了docker run命令的--device。

所以我们可以使用:

docker run --device /dev/null:/dev/raw1394 ...

它适用于我的容器。

实际上,每次运行时输入--device / dev / null:/ dev / raw1394都是非常有意义的。 但我找不到在Dockerfile中设置设备的方法。

我将链接创建添加到command:我用于app服务的docker-compose.yml文件。 它看起来像

version: '3'
services:
  thumbor:
    build: .
    ports:
      - 8888:8888
    command: bash -c "ln /dev/null dev/raw1394 && thumbor"

ln命令只能在docker-compose run --rm app bash docker-compose up而不是在docker-compose run --rm app bash

我从这个答案得到了bash -c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM