python - 带有 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_packages 有:
/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
谢谢!
解决方案
您是否尝试在 docker_with_pre_installed_packages 中安装 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" ]