【问题标题】:issues with Docker on wsl (ubuntu 22.04)wsl 上的 Docker 问题(ubuntu 22.04)
【发布时间】:2022-10-23 20:11:56
【问题描述】:

尝试在RUN pip install -r requirements.txt 步骤上构建 docker 映像失败,并出现以下错误:

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 不想安装。这可能是什么原因?

使用的系统:

  • 操作系统:Windows 11
  • 搭载 Ubuntu 22.04 的 WSL 2
  • Docker 版本 20.10.19,构建 d85ef84
  • Dockerfile 内容:
# 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

【问题讨论】:

  • 您在尝试连接到 pypi.org 时遇到超时错误。可能与防火墙有关吗?这是否适用于您可能制定了网络安全策略的工作?
  • 您还可以尝试在运行pip 时使用--default-timeout=100 之类的东西来增加超时。
  • @michjnich 感谢您的编辑和您的 cmets。出于某种原因,现在它显示以下内容: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 及更高版本。

标签: python django docker windows-subsystem-for-linux docker-build


【解决方案1】:

我今天遇到了这个问题。因此,您可以在 Docker 构建行中使用 --network host 来解决此问题。

出现此问题的原因是您的网络接口的 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 有效,但其他类似 pip 中断的东西),这只是这种情况(很可能)。如果您无法提取任何内容,则可能是 DNS/防火墙问题。

【讨论】:

  • 是的!实际上就是这样,在命令中添加--network host 可以解决问题。万分感谢!
  • 没有问题,是的,如果您想使用桥接网络(主机网络可能会很痛苦,因为它将 docker 容器端口直接映射到您的主机操作系统端口,因此可能会导致冲突),您必须执行上述步骤
  • 尝试添加 daemon.json 并设置 MTU,但这在 docker daemon 重启后没有任何效果,不幸的是(任何​​其他想法如何解决这个问题?即使运行 docker 容器然后运行 ​​'apt update',我也会得到 'Temporary解决“deb.debian.org”失败。
【解决方案2】:

似乎主要问题是我使用 Linux 说明直接从我的 WSL2 ubuntu 发行版安装了 docker,而不是借助与 WSL2 无缝集成的官方 Windows 安装程序。重新安装,现在网络按预期工作。感谢大家!

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2022-10-25
    • 2023-03-24
    • 2021-12-29
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多