首页 > 解决方案 > 如何从 Docker 容器内部访问在 WSL2 上运行的服务?

问题描述

我正在使用 Windows 10 1909 并安装了 WSL2,使用 Ubuntu 20.04,19.03.13-beta2 docker 版本,使用 WSL2 选项安装了 Docker for Windows Edge 版本。集成工作得很好,但我有一个无法解决的问题。

在 WSL2 实例上,有服务在运行,暴露了一些端口(3000、3001、3002、...)。从一个 docker 容器中,我需要访问特定开发场景(API 网关)的服务,而我无法开始工作。

我曾尝试直接使用 WSL2 IP 地址,但随后连接超时。我也尝试过使用host.docker.internal,它解析为 WSL2 IP 地址以外的其他内容,但它仍然无法正常工作。

是否有我需要拉的特殊技巧,或者目前不支持这种路由,但会支持,或者由于其他原因,这是不可能的?

这说明了我想要实现的目标:

从 docker 容器访问 WSL2 服务

其他路由工作 - 即我可以从 Windows 浏览器访问来自 WSL2 中的 node.js 进程的所有服务端口,并且我可以从 WSL2 内部和 Windows 中的容器访问公开的服务端口。只是这个缺失的环节我无法工作。

标签: dockerrouteswsl-2

解决方案


值得一提的:如果您使用 WSL2 子系统 IP 地址,则此方案有效。

如果您使用它不起作用-host.docker.internal此 DNS 别名是在容器中定义的,但它映射到 Windows 主机的 IP 地址,而不是 WSL2 主机的 IP 地址,并且返回 WSL2 主机内部的路由不起作用。

这(可能暂时)不起作用的原因有点不清楚 - 如果问题再次出现,我将重新审视这个答案,并且我设法找出实际问题可能是什么。


推荐阅读