Files
nexus/wiki/sources/WSL2-中-Docker-容器访问宿主机代理.md
2026-05-03 05:42:12 +08:00

45 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "WSL2 中 Docker 容器访问宿主机代理"
type: source
tags: [wsl, docker, proxy]
date: 2026-05-02
---
## Source File
- [[Home Office/WSL2 中 Docker 容器访问宿主机代理]]
## Summary用中文描述
- 核心主题WSL2 环境下 Docker 容器如何正确访问宿主机Windows上运行的代理服务
- 问题域WSL2 网络隔离场景下的容器代理配置
- 方法/机制:使用 Docker 内置 DNS 名称 `host.docker.internal` 替代 `127.0.0.1`/`localhost`Docker Desktop/WSL2 环境自动解析为宿主机 IP
- 结论/价值:避免容器内 localhost 指向自身导致的代理访问失败;适用于 pip/apt-get/curl 等各种命令的代理配置
## Key Claims用中文描述
- **WSL2 Docker 容器 + 宿主机代理**:在 WSL2 环境下运行的 Docker 容器,必须使用 `host.docker.internal` 而非 `127.0.0.1` 访问宿主机代理,因为容器内的 `127.0.0.1` 指向容器自身而非宿主机
- **pip 代理配置**Dockerfile 中 `pip install --proxy http://host.docker.internal:10808` 可正确走宿主机代理
- **apt 代理配置**`apt-get -o Acquire::http::Proxy="http://host.docker.internal:10808" update` 可正确走宿主机代理
- **curl 代理配置**`curl -x http://host.docker.internal:10808 <url>` 可正确走宿主机代理
- **Clash 代理前提**:代理软件(如 Clash必须开启「允许局域网连接」选项
## Key Quotes
> "容器内的 `127.0.0.1` 指向容器自身,无法访问宿主机代理。需用 Docker 内置 DNS 名称替代。" — 核心问题说明
> "避免在 Dockerfile 中硬编码 `ENV HTTPS_PROXY=http://127.0.0.1:...`,容器内无法访问" — Dockerfile 最佳实践
## Key Concepts
- [[DockerHostNetworking]]`host.docker.internal` 是 Docker 提供的特殊 DNS 名称,用于容器访问宿主机网络,属于 DockerHostNetworking 概念的 Linux/WSL2 实现方式
## Key Entities
- [[WSL2]]Windows Subsystem for Linux 2本文档的技术背景平台WSL2 默认 NAT 网络模式下容器内 `127.0.0.1` 指向自身
- [[Clash]]:本文档示例中宿主机上运行的代理软件,需开启「允许局域网连接」才能被容器访问
## Connections
- [[DockerHostNetworking]] ← documented_in ← [[WSL2-中-Docker-容器访问宿主机代理]](本文档记录了 `host.docker.internal` 在 WSL2 Docker 场景下的具体用法)
- [[WSL2-中-Docker-容器访问宿主机代理]] ← extends ← [[WSL2 启动与网络配置指南]](本文档补充了 WSL2 Docker 容器访问宿主机代理这一具体场景)
## Contradictions
- 与 [[n8n-docker-配置-telegram-代理-troubleshooting]] 细节差异:
- 冲突点:`host.docker.internal` 的可用性前提
- 当前观点n8n 文档):需要 `extra_hosts: - "host.docker.internal:host-gateway"` 配置才能使用
- 对方观点本文档Docker DesktopWindows/Mac及 WSL2 环境下均可用,未提及 `extra_hosts`
- 说明:两者可能均正确,差异在于 Docker Desktop for Windows 内置支持 vs 纯 WSL2无 Docker Desktop的不同配置要求