这个错误表明在运行 docker compose up 时,容器内的 pip 无法连接到 PyPI 服务器来安装 aiofiles ,可能的原因包括网络问题、DNS 配置错误或镜像源不可用。

# 原因分析

  1. DNS 配置问题:容器内无法正确解析域名(如 pypi.org )。
  2. 网络限制:宿主机或 Docker 网络配置阻止了容器访问外网。
  3. PyPI 源问题:默认 PyPI 源连接不稳定。

# 解决方法

# 1. 确认宿主机网络是否正常

在宿主机上测试是否能访问 PyPI:

curl https://pypi.org
ping pypi.org

如果宿主机网络有问题,优先解决网络连接。


# 2. 检查 Docker 容器的 DNS 配置

Docker 容器可能没有正确配置 DNS,导致无法解析域名。可以通过以下步骤修复:

# 手动配置 Docker 的 DNS

编辑 Docker 配置文件 /etc/docker/daemon.json ,添加 DNS 配置:

{
  "dns": ["8.8.8.8", "8.8.4.4", "1.1.1.1"]
}

然后重启 Docker 服务:

sudo systemctl restart docker

# 3. 使用国内镜像源

如果你的网络环境对外网访问有问题,可以修改 requirements.txt 中的安装命令或直接在 Dockerfile 中指定国内镜像源。例如:

# 修改 requirements.txt 的安装命令

在 Dockerfile 中修改 pip 的安装命令,添加国内镜像源:

RUN mltbenv/bin/pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 或直接修改 requirements.txt
aiofiles==<version> --index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 4. 确认 Docker 网络模式

容器可能使用了错误的网络模式。可以尝试使用 host 网络模式:

services:
  app:
    network_mode: "host"

# 5. 重试安装

如果问题是临时的,可以在容器内重试安装:

docker exec -it <container_id> /bin/bash
mltbenv/bin/pip install aiofiles

# 6. 调试容器内网络

进入容器后测试网络和 DNS:

docker exec -it <container_id> /bin/bash
ping pypi.org
nslookup pypi.org

如果这些命令失败,说明容器的网络有问题,需要进一步检查宿主机和 Docker 网络配置。


阅读次数

请我喝[茶]~( ̄▽ ̄)~*

藏雪 微信支付

微信支付

藏雪 支付宝

支付宝

藏雪 贝宝

贝宝