You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下Docker构建Django镜像时pip安装连接失败求助

Docker构建Django镜像时pip安装依赖失败(DNS解析错误)

问题描述

在Windows 10系统下,通过CMD执行Docker构建Django项目镜像时,pip安装requirements.txt依赖包失败,报错核心为DNS解析失败(Temporary failure in name resolution),无法连接到PyPI服务器。

我的Dockerfile内容:

FROM python:3.8-slim-buster
WORKDIR /main
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD python manage.py runserver

构建命令及报错日志:

E:\Satya_Django_TODO_APP\todo>docker build -t my_image --rm .
[+] Building 95.5s (8/9)
 => [internal] load build definition from Dockerfile                                      0.0s 
 => => transferring dockerfile: 32B                                                       0.0s 
 => [internal] load .dockerignore                                                         0.0s 
 => => transferring context: 2B                                                           0.0s 
 => [internal] load metadata for docker.io/library/python:3.8-slim-buster                 2.2s 
 => [1/5] FROM docker.io/library/python:3.8-slim-buster@sha256:0b92aced9b0e52b16870a7c09  0.0s 
 => [internal] load build context                                                         0.1s 
 => => transferring context: 28.89kB                                                      0.0s 
 => CACHED [2/5] WORKDIR /main                                                            0.0s 
 => CACHED [3/5] COPY requirements.txt requirements.txt                                   0.0s 
 => ERROR [4/5] RUN pip3 install -r requirements.txt                                     93.0s 
------
 > [4/5] RUN pip3 install -r requirements.txt:
#8 13.02 WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f04029205e0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/aioredis/
#8 15.23 Collecting aioredis==1.3.1
#8 25.24   WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f0402d7c4c0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /packages/b0/64/1b1612d0a104f21f80eb4c6e1b6075f2e6aba8e228f46f229cfd3fdac859/aioredis-1.3.1-py3-none-any.whl
#8 35.75   WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f0402d7c730>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /packages/b0/64/1b1612d0a104f21f80eb4c6e1b6075f2e6aba8e228f46f229cfd3fdac859/aioredis-1.3.1-py3-none-any.whl
#8 46.77   WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f0402d7c910>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /packages/b0/64/1b1612d0a104f21f80eb4c6e1b6075f2e6aba8e228f46f229cfd3fdac859/aioredis-1.3.1-py3-none-any.whl
#8 58.78   WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f0402d7cb20>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /packages/b0/64/1b1612d0a104f21f80eb4c6e1b6075f2e6aba8e228f46f229cfd3fdac859/aioredis-1.3.1-py3-none-any.whl
#8 72.80   WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f0402d7cca0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /packages/b0/64/1b1612d0a104f21f80eb4c6e1b6075f2e6aba8e228f46f229cfd3fdac859/aioredis-1.3.1-py3-none-any.whl
#8 82.81 ERROR: Could not install packages due to an OSError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/b0/64/1b1612d0a104f21f80eb4c6e1b6075f2e6aba8e228f46f229cfd3fdac859/aioredis-1.3.1-py3-none-any.whl (Caused by NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f0402d7ce50>: Failed to 
establish a new connection: [Errno -3] Temporary failure in name resolution'))
#8 82.81
------
executor failed running [/bin/sh -c pip3 install -r requirements.txt]: exit code: 1

原因分析

该错误是Docker构建阶段,容器内部无法解析外部域名导致的,常见诱因包括:

  • Docker DNS配置异常,无法获取正确的域名解析服务器
  • Windows防火墙/第三方安全软件拦截了Docker的网络请求
  • WSL2后端网络配置冲突(若使用WSL2作为Docker后端)
  • 代理设置干扰DNS解析

解决方案

1. 手动指定Docker DNS服务器

打开Docker Desktop,依次进入Settings > Resources > Network,在DNS服务器栏手动填写8.8.8.8(谷歌公共DNS)或114.114.114.114(国内公共DNS),取消"自动获取"选项,点击Apply & Restart重启Docker后重新构建。

2. 排查防火墙干扰

  • 临时关闭Windows Defender防火墙,执行构建命令测试是否正常
  • 若关闭后恢复正常,给Docker Desktop添加防火墙入站/出站规则,允许其访问网络
  • 检查是否有第三方防火墙软件(如360、火绒),暂时禁用后测试

3. 修复WSL2网络配置(若使用WSL2后端)

  • 打开CMD执行以下命令重启WSL:
    wsl --shutdown
    
  • 重启Docker Desktop,再尝试构建
  • 若问题持续,创建WSL配置文件固定DNS:
    1. 进入WSL终端,创建/etc/wsl.conf文件:
      sudo nano /etc/wsl.conf
      
    2. 写入以下内容:
      [network]
      generateResolvConf = false
      
    3. 保存退出后,执行wsl --shutdown重启WSL
    4. 再次进入WSL终端,编辑/etc/resolv.conf:
      sudo nano /etc/resolv.conf
      
    5. 添加nameserver 8.8.8.8,保存退出

4. 更换PyPI镜像源

修改Dockerfile中的pip安装命令,指定国内高速镜像源,直接绕过DNS解析问题同时加速安装:

方法1:临时指定镜像

RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

方法2:全局配置镜像

FROM python:3.8-slim-buster
WORKDIR /main
# 配置pip全局镜像源
RUN echo "[global]" > /etc/pip.conf \
    && echo "index-url = https://pypi.tuna.tsinghua.edu.cn/simple" >> /etc/pip.conf
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD python manage.py runserver

5. 检查代理设置

  • 若Windows开启了代理,进入Docker Desktop Settings > Resources > Proxies,选择"Use the same proxy as Windows",或手动填写正确的代理地址
  • 若代理配置复杂,可尝试临时关闭代理后执行构建命令

内容的提问来源于stack exchange,提问作者Satya Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:55:16