簡體   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