Проблемы с 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. Переустановил и теперь сеть работает как надо. Спасибо всем!