首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建docker镜像以引用venv中的python库

如何构建docker镜像以引用venv中的python库
EN

Stack Overflow用户
提问于 2018-07-24 13:17:34
回答 2查看 997关注 0票数 1

我正在尝试对接我的Django web应用程序,它在虚拟环境venv上运行。

这是我的Dockerfile的配置:

代码语言:javascript
复制
FROM ppc64le/python:2.7

ENV PYTHONUNBUFFERED 1 
ENV DJANGO_SETTINGS_MODULE=agricultureProj.settings.deploy 
ENV UWSGI_VIRTUALENV=/venv 
UWSGI_WSGI_FILE=agricultureProj/wsgi.py 
UWSGI_HTTP=:8005 
UWSGI_MASTER=1 
UWSGI_WORKERS=2 
UWSGI_THREADS=8 
UWSGI_UID=1000 
UWSGI_GID=2000 
UWSGI_LAZY_APPS=1 
UWSGI_WSGI_ENV_BEHAVIOR=holy

RUN virtualenv venv 
RUN source /venv/bin/activate 
RUN mkdir /code 
WORKDIR /code   

ADD requirements.txt /code/ 
RUN pip install -r requirements.txt

ADD . /code/

EXPOSE 8005

COPY ./docker-entrypoint.sh / 
RUN chmod uog+rx ./docker-entrypoint.sh 
ENTRYPOINT ["sh","/docker-entrypoint.sh"]

CMD ["/venv/bin/activate", "--http-auto-chunked", "--http-keepalive"

我想知道我应该如何定义我的Dockerfile,这样我就可以直接引用现有的Python库,并成功地构建和合成为此运行我的docker镜像。

**Append:

这是我在成功构建docker镜像后遇到的错误。

错误:

代码语言:javascript
复制
Recreating agricultureproj_db_1
Recreating agricultureproj_web_1
Attaching to agricultureproj_db_1, agricultureproj_web_1
db_1   | /docker-entrypoint.sh: 3: /docker-entrypoint.sh: source: not found
web_1  | ----------
db_1   | ----------
web_1  | ['/home/ppt/Elephas2/agricultureProj_v6_723/agricultureProj',
db_1   | ['/home/ppt/Elephas2/agricultureProj_v6_723/agricultureProj',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/plat-powerpc64le-linux-gnu',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/plat-powerpc64le-linux-gnu',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-tk',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-tk',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-old',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-old',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-dynload',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-dynload',
web_1  |  '/usr/lib/python2.7',
db_1   |  '/usr/lib/python2.7',
web_1  |  '/usr/lib/python2.7/plat-powerpc64le-linux-gnu',
db_1   |  '/usr/lib/python2.7/plat-powerpc64le-linux-gnu',
web_1  |  '/usr/lib/python2.7/lib-tk',
db_1   |  '/usr/lib/python2.7/lib-tk',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/local/lib/python2.7/site-packages',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/local/lib/python2.7/site-packages',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/site-packages',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/site-packages',
web_1  |  '/usr/lib/python2.7/dist-packages',
db_1   |  '/usr/lib/python2.7/dist-packages',
web_1  |  '/usr/lib/python2.7/dist-packages/cv2.powerpc64le-linux-gnu.so']
db_1   |  '/usr/lib/python2.7/dist-packages/cv2.powerpc64le-linux-gnu.so']
web_1  | ----------
db_1   | ----------
web_1  | Traceback (most recent call last):
web_1  |   File "manage.py", line 37, in <module>
db_1   | Traceback (most recent call last):
web_1  |     "Couldn't import Django. Are you sure it's installed and "
db_1   |   File "manage.py", line 37, in <module>
web_1  | ImportError: Couldn't import Django. Are you sure it's installed and 
available on your PYTHONPATH environment variable? Did you forget to activate 
a virtual environment?
db_1   |     "Couldn't import Django. Are you sure it's installed and "
web_1  | ----------
db_1   | ImportError: Couldn't import Django. Are you sure it's installed and 
available on your PYTHONPATH environment variable? Did you forget to activate 
a virtual environment?
web_1  | ['/home/ppt/Elephas2/agricultureProj_v6_723/agricultureProj',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/plat-powerpc64le-linux-gnu',
db_1   | ----------
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-tk',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-old',
db_1   | ['/home/ppt/Elephas2/agricultureProj_v6_723/agricultureProj',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-dynload',
web_1  |  '/usr/lib/python2.7',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7',
web_1  |  '/usr/lib/python2.7/plat-powerpc64le-linux-gnu',
web_1  |  '/usr/lib/python2.7/lib-tk',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/plat-powerpc64le-linux-gnu',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/local/lib/python2.7/site-packages',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-tk',
web_1  |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/site-packages',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-old',
web_1  |  '/usr/lib/python2.7/dist-packages',
web_1  |  '/usr/lib/python2.7/dist-packages/cv2.powerpc64le-linux-gnu.so']
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/lib-dynload',
web_1  | ----------
db_1   |  '/usr/lib/python2.7',
db_1   |  '/usr/lib/python2.7/plat-powerpc64le-linux-gnu',
web_1  | Traceback (most recent call last):
web_1  |   File "manage.py", line 37, in <module>
web_1  |     "Couldn't import Django. Are you sure it's installed and "
db_1   |  '/usr/lib/python2.7/lib-tk',
web_1  | ImportError: Couldn't import Django. Are you sure it's installed and 
available on your PYTHONPATH environment variable? Did you forget to activate 
a virtual environment?
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/local/lib/python2.7/site-packages',
db_1   |  '/home/ppt/Elephas2/agricultureProj_v6_723
/agricultureProj/venv/lib/python2.7/site-packages',
db_1   |  '/usr/lib/python2.7/dist-packages',
db_1   |  '/usr/lib/python2.7/dist-packages/cv2.powerpc64le-linux-gnu.so']
db_1   | ----------
db_1   | Traceback (most recent call last):
db_1   |   File "manage.py", line 37, in <module>
db_1   |     "Couldn't import Django. Are you sure it's installed and "
db_1   | ImportError: Couldn't import Django. Are you sure it's installed and 
available on your PYTHONPATH environment variable? Did you forget to activate 
a virtual environment?
agricultureproj_web_1 exited with code 1
agricultureproj_db_1 exited with code 1
ppt@server:~/Elephas2/agricultureProj_v6_723/agricultureProj$ File 
"manage.py", line 37, in <module>
-bash: syntax error near unexpected token `newline'
ppt@server:~/Elephas2/agricultureProj_v6_723/agricultureProj$ db_1   |     
"Couldn't import Django. Are you sure it's installed and "
db_1: command not found
Couldn't import Django. Are you sure it's installed and : command not found
ppt@server:~/Elephas2/agricultureProj_v6_723/agricultureProj$ db_1   | 
ImportError: Couldn't import Django. Are you sure it's installed and 
available on 
your PYTHONPATH environment variable? Did you forget to activate a virtual 
environment?
db_1: command not found
ImportError:: command not found

当我尝试对创建的图像进行docker合成时,环境无法导入Django。

EN

回答 2

Stack Overflow用户

发布于 2018-07-24 16:17:04

不要激活虚拟环境,只需将其bin目录添加到PATH环境变量的开头即可。这通常就足够了。

您还应该避免以root身份运行映像。即使在容器中,这也不是一个好的做法。

票数 1
EN

Stack Overflow用户

发布于 2018-07-24 14:25:10

您可以使用-- system -site-package来指示venv优先使用系统库,这意味着更改此行,然后指示pip忽略系统安装的库

代码语言:javascript
复制
RUN virtualenv --system-site-packages venv 
RUN source /venv/bin/activate 
RUN mkdir /code WORKDIR /code
ADD requirements.txt /code/ 
RUN pip install --ignore-installed -r requirements.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51490937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档