Попытка создать образ докера завершается с ошибкой на шаге RUN pip install -r requirements.txt со следующей ошибкой:
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/asgiref/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/asgiref/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/asgiref/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/asgiref/`
почему-то asgiref==3.5.2 не хочет устанавливаться. Что может быть причиной этого?
Используемая система:
# Pull base image
FROM python:3.10.6-slim-bullseye
# Set enviroment variables
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set work directory
WORKDIR /code
# Install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# Copy project
COPY . .
asgiref==3.5.2
Django==4.1.2
sqlparse==0.4.3
Вы также можете попробовать увеличить время ожидания, используя что-то вроде --default-timeout=100 при запуске pip.
@michjnich спасибо за правки и ваши комментарии. Почему-то сейчас показывает следующее: ERROR: Could not find a version that satisfies the requirement asgiref==3.5.2 (from versions: none) ERROR: No matching distribution found for asgiref==3.5.2
@michjnich, что абсурдно, версии Python и PIP такие же, как и используемые в виртуальной среде, и django4 вместе с asgiref прекрасно там установлены. Непонятно в чем дело....
Это при беге docker build . ? Я скопировал ваши 2 файла в пустой проект, и у меня все работает. Если у вас проблемы локально, просто убедитесь, что вы используете правильные версии ... python --version - для asgiref 3.5.2 требуется версия 3.7 и выше.
@michjnich да, это когда я бегу docker build . . Я использую версию Python 3.10.6, так что все должно быть в порядке. Вы пробовали это под WSL?
Запустил его в докере под wsl2, и все заработало. Интересный ответ ниже, хотя - любопытно посмотреть, сработает ли он для вас...






У меня была эта проблема сегодня. Итак, вы можете решить эту проблему с помощью --network host в строке сборки Docker.
Причиной этого является несоответствие MTU ваших сетевых интерфейсов. Если вы откроете базовый образ из своего Dockerfile в интерактивном режиме: sudo docker run -it {your base image repo} /bin/bash, и запустите ip a, а затем сделаете то же самое на своей хост-ОС, вы, вероятно, обнаружите, что они разные. Это означает, что мост Docker отбрасывает пакеты/не удается передать. Если вы хотите, чтобы мостовая сеть работала, а не хост, создайте файл в своей хост-ОС по адресу /etc/docker/daemon.json с содержимым.
{
"mtu": whatever_your_host_os_MTU_is
}
а затем запустите sudo systemctl restart docker, это, вероятно, должно исправить вашу сеть моста.
Обновлено: я должен добавить, что это только в том случае (скорее всего), если у вас есть подключение к Интернету из вашего контейнера (т.е. apt/yum работает, но что-то еще, например, прерывается). Если вы ничего не можете получить, у вас, вероятно, проблема с DNS/брандмауэром.
Да! На самом деле это было так, добавление --network host к команде решило проблему. Благодаря тонну!
нет проблем, и да, если вы хотите использовать мостовую сеть (хост-сеть может быть проблемой, поскольку она сопоставляет порты контейнера докеров непосредственно с портами вашей хост-ОС, поэтому может вызвать конфликты), вам придется выполнить шаги, описанные выше.
попытался добавить daemon.json и установить MTU, но это не дало никакого эффекта после перезапуска демона докеров, к сожалению (есть другие идеи, как решить эту проблему? Даже если запустить контейнер докеров, а затем запустить «подходящее обновление», я получаю «Временное ошибка разрешения 'deb.debian.org''.
Похоже, основная проблема заключалась в том, что я установил докер прямо из своего дистрибутива Ubuntu WSL2, используя инструкции для Linux, а не с помощью официального установщика Windows, который легко интегрируется с WSL2. Переустановил и теперь сеть работает как задумано. Спасибо всем!
Вы получаете сообщение об ошибке тайм-аута при попытке подключения к
pypi.org. Возможно, это связано с брандмауэром? Это на работе, где у вас могут быть политики сетевой безопасности?