首页 > 解决方案 > 带有 pip install 的 docker build 会覆盖现有的包

问题描述

这是我的 Dockerfile:

FROM docker_with_pre_installed_packages:1.0
ADD requirements.txt .
RUN pip install -r requirements.txt
ADD app app
WORKDIR /

docker_with_pre_installed_pa​​ckages 有:

/usr/local/lib/python2.7/site-packages/my_packages/db
/usr/local/lib/python2.7/site-packages/my_packages/config
/usr/local/lib/python2.7/site-packages/my_packages/logging

要求.txt:

my_package.redis-db
my_package.common.utils

跑完之后

docker build -t test:1.0 .
docker run -it test:1.0 bash
cd /usr/local/lib/python2.7/site-packages/my_packages/
ls
__init__.py redis_db common

pip freeze 仍然显示旧包,我仍然可以看到 dist-info 目录,但是当尝试运行 python 并从预安装的包中导入一些东西时,我得到:

ImportError: No module named my_package.config

谢谢!

标签: pythondockerpip

解决方案


您是否尝试在 docker_with_pre_installed_pa​​ckages 中安装 python 或只是复制了一些文件?看起来python没有正确安装。顺便说一句,从今年开始不支持Python 2.7,强烈建议使用Python 3。尝试使用python docker image 并安装依赖项并进行比较。

FROM python:3
ADD requirements.txt /
ADD app app
RUN pip install -r requirements.txt
CMD [ "python", "./my_script.py" ]

推荐阅读