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

WSL环境下Docker build未应用代理设置的问题求助

问题描述

在Windows通过WSL(Ubuntu环境)使用Docker时,docker build过程中Dockerfile内的apt命令无法使用代理,而WSL内的apt和docker pull均可正常走代理。此前直接使用Docker Desktop时,代理设置对docker run和docker build均能正常生效。

已配置的代理位置:

  • 在/etc/environment中设置环境变量:
http_proxy=http://username:password@proxy.com:3128
https_proxy=http://username:password@proxy.com:3128
  • 在/etc/docker/daemon.json中配置代理:
{
    "proxies": {
        "http-proxy": "http://username:password@proxy.com:3128",
        "https-proxy": "http://username:password@proxy.com:3128",
        "no-proxy": "localhost,127.0.0.1,docker-registry.somecorporation.com"
    },
    "insecure-registries": ["mcr.microsoft.com"]
}
  • 在/etc/systemd/system/docker.service.d/proxy.conf中添加代理:
[Service]
Environment="http_proxy=http://username:password@proxy.com:3128"
Environment="https_proxy=http://username:password@proxy.com:3128"
Environment="no_proxy=localhost,127.0.0.1,docker-registry.somecorporation.com"

Dockerfile内容

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

RUN apt-get update && \
    apt-get install -y libldap2-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src

COPY ["EQP_Workspace/EQP_Workspace.csproj", "EQP_Workspace/"]
RUN dotnet restore "EQP_Workspace/EQP_Workspace.csproj"
COPY . .
WORKDIR "/src/EQP_Workspace"
RUN dotnet build "EQP_Workspace.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "EQP_Workspace.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "EQP_Workspace.dll"]

错误信息

[eqp_workspace base 3/3] RUN apt-get update &&     apt-get install -y libldap2-dev &&     apt-get clean &&     rm -rf /var/lib/apt/lists/*:
30.69 Ign:1 http://deb.debian.org/debian bookworm InRelease
30.70 Ign:2 http://deb.debian.org/debian bookworm-updates InRelease
30.70 Ign:3 http://deb.debian.org/debian-security bookworm-security InRelease
31.70 Ign:1 http://deb.debian.org/debian bookworm InRelease
31.70 Ign:2 http://deb.debian.org/debian bookworm-updates InRelease
31.71 Ign:3 http://deb.debian.org/debian-security bookworm-security InRelease
33.70 Ign:1 http://deb.debian.org/debian bookworm InRelease
33.71 Ign:2 http://deb.debian.org/debian bookworm-updates InRelease
33.71 Ign:3 http://deb.debian.org/debian-security bookworm-security InRelease
37.70 Err:1 http://deb.debian.org/debian bookworm InRelease
37.70   Could not connect to deb.debian.org:80 (199.232.46.132), connection timed out
37.71 Err:2 http://deb.debian.org/debian bookworm-updates InRelease
37.71   Unable to connect to deb.debian.org:80:
37.71 Err:3 http://deb.debian.org/debian-security bookworm-security InRelease
37.71   Unable to connect to deb.debian.org:80:
37.71 Reading package lists...
37.72 W: Failed to fetch http://deb.debian.org/debian/dists/bookworm/InRelease  Could not connect to deb.debian.org:80 (199.232.46.132), connection timed out
37.72 W: Failed to fetch http://deb.debian.org/debian/dists/bookworm-updates/InRelease  Unable to connect to deb.debian.org:80:
37.72 W: Failed to fetch http://deb.debian.org/debian-security/dists/bookworm-security/InRelease  Unable to connect to deb.debian.org:80:
37.72 W: Some index files failed to download. They have been ignored, or old ones used instead.
37.72 Reading package lists...
37.73 Building dependency tree...
37.73 Reading state information...
37.73 E: Unable to locate package libldap2-dev
------
time="2024-07-24T14:59:07+08:00" level=warning msg="current commit information was not captured by the build" error="git was not found in the system: exec: \"git.exe\": executable file not found in %PATH%"
failed to solve: process "/bin/sh -c apt-get update &&     apt-get install -y libldap2-dev &&     apt-get clean &&     rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100
解决方案

方法1:构建时传递代理参数

直接在docker build命令中通过--build-arg传递代理环境变量,让构建容器内的进程能获取到代理配置:

docker build \
  --build-arg http_proxy=http://username:password@proxy.com:3128 \
  --build-arg https_proxy=http://username:password@proxy.com:3128 \
  --build-arg no_proxy=localhost,127.0.0.1 \
  -t eqp-workspace .

方法2:修改Dockerfile添加代理配置

方式A:临时设置容器环境变量

在执行apt命令前,先设置代理环境变量,完成后可选择清理避免敏感信息遗留:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# 设置代理环境变量
ENV http_proxy=http://username:password@proxy.com:3128
ENV https_proxy=http://username:password@proxy.com:3128
ENV no_proxy=localhost,127.0.0.1

RUN apt-get update && \
    apt-get install -y libldap2-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 清理代理环境变量
ENV http_proxy=""
ENV https_proxy=""
ENV no_proxy=""

方式B:配置apt专属代理

直接生成apt的代理配置文件,仅对apt命令生效:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

# 配置apt代理
RUN echo "Acquire::http::Proxy \"http://username:password@proxy.com:3128/\";" > /etc/apt/apt.conf.d/00proxy && \
    echo "Acquire::https::Proxy \"http://username:password@proxy.com:3128/\";" >> /etc/apt/apt.conf.d/00proxy && \
    apt-get update && \
    apt-get install -y libldap2-dev && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    # 清理代理配置文件
    rm /etc/apt/apt.conf.d/00proxy

方法3:配置Docker Buildx全局代理

如果使用Docker Buildx(默认构建工具),可配置全局构建代理,无需每次构建传参:

  1. 编辑~/.docker/config.json,添加代理配置:
{
  "proxies": {
    "default": {
      "httpProxy": "http://username:password@proxy.com:3128",
      "httpsProxy": "http://username:password@proxy.com:3128",
      "noProxy": "localhost,127.0.0.1"
    }
  }
}
  1. 重启Docker服务:
sudo systemctl restart docker

关键注意事项

  • 验证WSL网络连通性:在WSL内执行curl http://deb.debian.org,确认能通过代理访问目标地址。
  • Docker Desktop联动配置:若WSL使用Docker Desktop的Docker服务,需确保Docker Desktop的代理已开启,且勾选"Use the same proxy settings as Windows"。
  • 敏感信息防护:避免将代理的用户名密码硬编码到Dockerfile中,优先使用--build-arg或环境变量传递。

内容的提问来源于stack exchange,提问作者Lan Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:39:53