2015-07-12 92 views
2

我試圖運行與碼頭工人,撰寫我的簡單的金字塔應用,下面是我的搬運工文件:DistributionNotFound運行與pserve當搬運工,撰寫

Dockerfile

FROM python:2.7-onbuild 
RUN pip install --no-cache-dir -r requirements_dev.txt 

docker- compose.yml

db: 
    image: mysql:5.6 

web: 
    build: . 
    command: pserve development.ini --reload 
    volumes: 
    - .:/usr/src/app 
    ports: 
    - "6543:6543" 
    links: 
    - db:db 

當我運行docker-compose up我得到pkg_resources.DistributionNotFound: The 'tenders' distribution was not found and is required by the application,這很奇怪,因爲我的應用程序應該已經安裝了使用pip install -e .命令。當我啓動pserve development.ini --reload它工作得很好

docker-compose run web bash 
[email protected]:/tenders# pip freeze | grep tenders # no results 
[email protected]:/tenders# pip install -e . 
Obtaining file:///tenders 
# Skippping most of the outup for more readability 
Installing collected packages: tenders 
    Running setup.py develop for tenders 
Successfully installed tenders 
[email protected]:/tenders# pip freeze | grep tenders 
-e [email protected]:xxx/[email protected]#egg=tenders-master 

現在:

事情變得怪異。

我在做什麼錯,我如何使用pip install -e .(或任何其他命令)自動安裝我的包tenders

回答

2

我有同樣的問題。當docker卷被掛載時發生。

在您的Dockerfile中,您安裝了應用程序pip install -e .,該應用程序在當前目錄(在圖像中)中創建.egg-info目錄。但後來,當您使用docker捲來替換容器源目錄時,您的主機文件系統中沒有該.egg-info目錄。

我修復它的方式是我在我的主機文件系統中創建了一個virtualenv,我運行了python setup.py develop,但我想你可以運行pip install -e .。它創建.egg-info目錄,以便在從容器中運行pserve時存在該目錄。 virtualenv可能在那時可能被刪除。

我真的不確定這是最好的解決方案,但至少現在你知道問題的原因了。

+0

感謝您的回覆。所以你建議修改Dockerfile,創建並激活virtualenv然後安裝軟件包? – matino

+0

不,我在主機文件系統中創建了virtualenv,以便主文件系統中存在.egg-info文件夾。然後,當您啓動Docker容器並裝入卷時,圖像目錄將被刪除,但來自主機的新目錄也將被作爲.egg-info目錄。這真的不完美,可能有更優雅的解決方案。 –

+0

對不起,我不明白這一點:'但是後來,當你使用docker捲來替換你的容器源目錄時,你的主機文件系統中沒有這個.egg-info目錄。爲什麼我沒有該目錄和我的應用程序目錄存在(注意 - 我不再刪除Dockerfile中的.egg目錄 - 請參閱我的編輯)? – matino