docker build with pip install перезаписывает существующие пакеты - PullRequest
2 голосов
/ 19 февраля 2020

Это мой 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

needs.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

Спасибо!

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Вы пытались установить python в свои docker_with_pre_installed_packages или просто скопировали некоторые файлы? Похоже, python не был правильно установлен. Кстати, Python 2.7 не поддерживается с этого года, настоятельно рекомендуем использовать Python 3. Попробуйте использовать python docker образ, установите зависимости и сравните.

FROM python:3
ADD requirements.txt /
ADD app app
RUN pip install -r requirements.txt
CMD [ "python", "./my_script.py" ]
0 голосов
/ 20 февраля 2020

Проблема была в том, что раб Дженкинс запустил эту сборку. Я попытался запустить его на новом и все исправилось

0 голосов
/ 19 февраля 2020

Я предлагаю проверить, что именно изменилось в вашем docker контейнере из-за выполнения

pip install -r requirements.txt

Я бы

1) собрал docker контейнер из строк перед установкой pip

FROM docker_with_pre_installed_packages:1.0
ADD requirements.txt .
CMD /bin/bash

2) запустите docker и выполните вручную pip install -r requirements.txt

Затем за пределами docker (но он все еще работает) Я бы увидел, какая разница вызвана вышеупомянутой командой в моем контейнер, выполнив

3) docker ps, чтобы увидеть container_id (например, 397cd1c9939f)

4) docker diff 397cd1c9939f, чтобы увидеть разницу

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...