Проблемы с Docker на wsl (ubuntu 22.04)

Попытка собрать образ докера не удается на 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 не хочет устанавливаться. В чем может быть причина?

Используемая система:

  • OS: Windows 11
  • WSL 2 с Ubuntu 22.04 на борту
  • Docker версии 20.10.19, сборка d85ef84
  • Содержание файла докера:
# 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 . .
  • requirements.txt содержимое:
asgiref==3.5.2
Django==4.1.2
sqlparse==0.4.3

Сегодня у меня возникла эта проблема. Итак, вы можете исправить эту проблему с помощью --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, это, вероятно, исправит сетевую работу моста.

Похоже, что основная проблема заключалась в том, что я установил docker прямо из дистрибутива ubuntu WSL2, используя инструкции для Linux, а не с помощью официального установщика Windows, который легко интегрируется с WSL2. Переустановил и теперь сеть работает как надо. Спасибо всем!

Вернуться на верх