DistributionNotFound 当 运行 使用 docker-compose 保存时
DistributionNotFound when running pserve with docker-compose
我正在尝试 运行 我的简单 Pyramid 应用程序 docker-compose,下面是我的 docker 文件:
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 .
命令安装。
事情越来越奇怪了:
docker-compose run web bash
root@2323b6b2f3ca:/tenders# pip freeze | grep tenders # no results
root@2323b6b2f3ca:/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
root@2323b6b2f3ca:/tenders# pip freeze | grep tenders
-e git+git@bitbucket.org:xxx/tenders.git@342a8f9101a3e06fa04d71f4eef81b461476d3a5#egg=tenders-master
现在,当我启动 pserve development.ini --reload
时,一切正常。
我做错了什么,如何使用 pip install -e .
(或任何其他命令)自动安装我的软件包 tenders
?
更新:
在服务的 volumes
部分,您可以告诉 Docker 使用容器中的 .egg-info
文件夹,而不是主机安装的卷。
例如,请参阅该配置中的 /usr/src/app/yourapp.egg-info
:
web:
build: .
command: pserve development.ini --reload
volumes:
- .:/usr/src/app:cached
- /usr/src/app/yourapp.egg-info
ports:
- "6543:6543"
links:
- db:db
上一个回答:
我遇到了同样的问题。它发生在安装 docker 卷时。
在您的 Docker 文件中,您使用 pip install -e .
安装应用程序,这会在当前目录(图中)创建 .egg-info 目录。但是稍后,当您使用 docker 卷将容器源目录替换为您的时,您的主机文件系统中没有这个 .egg-info 目录。
我修复它的方法是在我的主机文件系统中创建一个 virtualenv,我 运行 python setup.py develop
,但我想你可以 运行 pip install -e .
。它创建了 .egg-info 目录,因此当您从容器中 运行 pserve
时它就存在。那时可能会删除 virtualenv。
我真的不确定这是最好的解决方案,但至少,现在您知道问题的原因了。
我正在尝试 运行 我的简单 Pyramid 应用程序 docker-compose,下面是我的 docker 文件:
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 .
命令安装。
事情越来越奇怪了:
docker-compose run web bash
root@2323b6b2f3ca:/tenders# pip freeze | grep tenders # no results
root@2323b6b2f3ca:/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
root@2323b6b2f3ca:/tenders# pip freeze | grep tenders
-e git+git@bitbucket.org:xxx/tenders.git@342a8f9101a3e06fa04d71f4eef81b461476d3a5#egg=tenders-master
现在,当我启动 pserve development.ini --reload
时,一切正常。
我做错了什么,如何使用 pip install -e .
(或任何其他命令)自动安装我的软件包 tenders
?
更新:
在服务的 volumes
部分,您可以告诉 Docker 使用容器中的 .egg-info
文件夹,而不是主机安装的卷。
例如,请参阅该配置中的 /usr/src/app/yourapp.egg-info
:
web:
build: .
command: pserve development.ini --reload
volumes:
- .:/usr/src/app:cached
- /usr/src/app/yourapp.egg-info
ports:
- "6543:6543"
links:
- db:db
上一个回答:
我遇到了同样的问题。它发生在安装 docker 卷时。
在您的 Docker 文件中,您使用 pip install -e .
安装应用程序,这会在当前目录(图中)创建 .egg-info 目录。但是稍后,当您使用 docker 卷将容器源目录替换为您的时,您的主机文件系统中没有这个 .egg-info 目录。
我修复它的方法是在我的主机文件系统中创建一个 virtualenv,我 运行 python setup.py develop
,但我想你可以 运行 pip install -e .
。它创建了 .egg-info 目录,因此当您从容器中 运行 pserve
时它就存在。那时可能会删除 virtualenv。
我真的不确定这是最好的解决方案,但至少,现在您知道问题的原因了。