WSL2中Docker配置IPv4指定端口监听失败求助
WSL2中Docker监听IPv4地址配置问题解决
需求说明
在Windows工作站的WSL2环境部署Docker,让2015款MacBook Pro能通过IPv4地址访问Docker服务(暂不考虑连接安全性),目标是让Docker同时监听Unix套接字和0.0.0.0:2375。
已尝试操作
- 编辑
/etc/docker/daemon.json,添加配置:
执行"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]sudo systemctl restart docker重启服务。 - 修改systemd的
docker.service文件:
初始将ExecStart设为/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375,后续移除所有-H参数,但问题未解决。
当前状态
systemctl status docker显示Docker正常运行,日志提示API listen on [::]:2375。- Windows PowerShell执行
Get-NetTCPConnection -LocalPort 2375,结果显示仅监听IPv6回环地址::1,而非预期的0.0.0.0。
Docker服务状态日志
daly@Daly-PC:~$ systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2023-12-24 20:04:40 CET; 24min ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 2081 (dockerd) Tasks: 20 Memory: 41.7M CGroup: /system.slice/docker.service └─2081 /usr/bin/dockerd Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.682162156+01:00" level=warning msg="WARNING: API is accessible on http://0.0.0.0:2375 without encryption.\n Access to the > Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.682200216+01:00" level=warning msg="WARNING: No blkio throttle.read_bps_device support" Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.682207886+01:00" level=warning msg="WARNING: No blkio throttle.write_bps_device support" Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.682211576+01:00" level=warning msg="WARNING: No blkio throttle.read_iops_device support" Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.682215876+01:00" level=warning msg="WARNING: No blkio throttle.write_iops_device support" Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.682228515+01:00" level=info msg="Docker daemon" commit=311b9ff graphdriver=overlay2 version=24.0.7 Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.682251535+01:00" level=info msg="Daemon has completed initialization" Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.693404023+01:00" level=info msg="API listen on /var/run/docker.sock" Dec 24 20:04:40 Daly-PC dockerd[2081]: time="2023-12-24T20:04:40.693452703+01:00" level=info msg="API listen on [::]:2375" Dec 24 20:04:40 Daly-PC systemd[1]: Started Docker Application Container Engine.
问题
- 如何正确配置WSL2中的Docker,使其同时监听Unix套接字和
0.0.0.0:2375IPv4连接? - 是否需要额外设置确保Docker监听指定IPv4地址?
解决方案
1. 统一配置来源,消除冲突
Docker的daemon.json和systemd的docker.service不能同时配置hosts参数,否则会导致监听行为异常。正确做法是仅通过daemon.json配置,清理systemd中的相关参数:
- 编辑
/etc/docker/daemon.json,确保内容如下(若文件不存在则创建):{ "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"] } - 编辑
/lib/systemd/system/docker.service,找到ExecStart行,修改为:
移除所有ExecStart=/usr/bin/dockerd-H开头的参数,避免覆盖daemon.json的配置。 - 禁用并停止
docker.socket(该套接字会干扰Docker的监听设置):sudo systemctl stop docker.socket sudo systemctl disable docker.socket - 重新加载systemd配置并重启Docker:
sudo systemctl daemon-reload sudo systemctl restart docker
2. 验证监听状态
在WSL2终端执行以下命令,确认Docker同时监听IPv4和IPv6的2375端口:
ss -tulpn | grep 2375
正常输出应包含0.0.0.0:2375和[::]:2375的监听记录。此时在Windows PowerShell中执行Get-NetTCPConnection -LocalPort 2375,就能看到0.0.0.0的监听条目。
3. 额外配置确保外部访问
- WSL2防火墙放行端口:
sudo ufw allow 2375/tcp - Windows防火墙放行端口:在Windows Defender防火墙中添加入站规则,允许TCP 2375端口的连接。
- Mac访问设置:Mac端通过Windows工作站的IP地址+2375端口访问Docker服务(如
tcp://192.168.x.x:2375),若WSL2 IP动态变化,可直接使用Windows主机名访问。
环境信息
- Windows Subsystem for Linux(WSL2)
- Docker版本:Docker version 24.0.7, build afdd53b
- Windows操作系统:22H2 Build 22621.2861
内容的提问来源于stack exchange,提问作者Mohamed Ali Ben Thaier
相关产品推荐
相关产品推荐

