---
title: "WSL 2 使用 Docker 桥接模式网络访问 HTTPS 超时的解决方法"
tags: ['WSL 2', 'Docker', 'Network']
published: 2026-01-21 04:53:46
updated: 2026-01-21 00:00:00
excerpt: "本文介绍在 WSL 2 中使用 Docker 的桥接模式（bridge network）访问 HTTPS 时出现超时问题的解决方法。"
---
> 本文件是烧饼博客文章的 Markdown 原文，正式版本见 https://u.sb/fix-wsl-2-docker-network/
> 全站文章与页面索引见 https://u.sb/llms.txt，建议先读索引再继续抓取。

本文介绍在 WSL 2 中使用 Docker 的桥接模式（bridge network）访问 HTTPS 时出现超时问题的解决方法。

最近一直在 Windows 下使用基于 WSL 2 的 Debian 进行开发。许多场景下需要使用 Docker 构建镜像，但过程中遇到一个奇怪的问题，在 Docker 容器内部访问 HTTP 站点时一切正常：

```bash
$ docker run --rm curlimages/curl time curl -s http://ip.gs
192.0.2.2
real    0m 0.02s
user    0m 0.00s
sys     0m 0.00s
```

一旦切换为 HTTPS，访问就会明显变慢，并且有一定概率出现超时：

```bash
$ docker run --rm curlimages/curl time curl -s https://ip.gs
192.0.2.2
real    0m 6.52s
user    0m 0.00s
sys     0m 0.00s
```

然而，如果将 Docker 切换到 Host 模式（`--network=host`），访问又恢复正常：

```bash
$ docker run --rm --network=host curlimages/curl time curl -s https://ip.gs
192.2.0.2
real    0m 0.28s
user    0m 0.00s
sys     0m 0.00s
```

在排查了 WSL 2 的 Debian 系统配置后，最终请教 ChatGPT 得到结论：

>> Path MTU 与防火墙流量检查（inspection）不兼容导致问题

解决方法很简单：将 WSL 2 虚拟网络的 MTU 下调为 `1400` 即可。

## 1、添加 Docker 配置

在 WSL 2 的系统里，使用 root 权限（`sudo`）修改 `/etc/docker/daemon.json` 文件：

```json
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "mtu": 1400,
    "dns": [
      "8.8.8.8",
      "1.1.1.1"
    ]
}
```

其中 `"mtu": 1400,` 是关键配置。

然后在 Windows 下把 WSL 2 关闭：

```powershell
wsl --shutdown
```

## 2、修改 WSL 2 网卡配置

在 Windows 下使用管理员身份运行 Powershell，检查网卡名称：

```powershell
PS C:\Users\showfom> Get-NetAdapter | Where-Object { $_.Name -like "*WSL*" }

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
vEthernet (WSL (Hyper-V … Hyper-V Virtual Ethernet Adapter #3          41 Up           12-34-56-78-AB-CD        10 Gbps

PS C:\Users\showfom> Get-NetAdapter | Format-Table -AutoSize

Name                               InterfaceDescription                      ifIndex Status       MacAddress        Lin
                                                                                                                    kSp
                                                                                                                    eed
----                               --------------------                      ------- ------       ----------        ---
vEthernet (Default Switch)         Hyper-V Virtual Ethernet Adapter               35 Up           12-34-56-78-AB-AB …ps
vEthernet (WSL (Hyper-V firewall)) Hyper-V Virtual Ethernet Adapter #3            41 Up           12-34-56-78-AB-CD …ps
```

输出可以看到完整名称为 `vEthernet (WSL (Hyper-V firewall))`，然后为其设置 MTU：

```powershell
netsh interface ipv4 set subinterface "vEthernet (WSL (Hyper-V firewall))" mtu=1400 store=persistent
```

出现 `Ok.` 字样即代表设置成功。

## 3、测试 WSL 2 中的 Docker 网络

然后重新运行 WSL 2 虚拟机：

```powershell
wsl -d debian
```

再次测试：

```bash
$ docker run --rm curlimages/curl time curl -s https://ip.gs
192.0.2.2
real    0m 0.28s
user    0m 0.00s
sys     0m 0.00s
```

问题已完美解决，可以继续愉快地 Vibe Coding 了！ *★,°*:.☆(￣▽￣)/$:*.°★* 。