如何从Docker容器中访问WSL2上运行的服务?

时间:2020-09-15 08:57:39

标签: docker routes wsl-2

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

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

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

我是否需要拉一个特殊的技巧,或者当前不支持这种路由,但是会,或者由于其他原因而无法实现这种路由吗?

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

Accessing WSL2 services from docker container

其他路由有效-即我可以从Windows浏览器访问WSL2内部的node.js进程提供的所有服务端口,也可以从WSL2内部和Windows的容器访问公开的服务端口。只是这个缺失的链接,我无法工作。

1 个答案:

答案 0 :(得分:0)

其价值:如果您使用WSL2子系统IP地址,此方案是有效的

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

这个原因(可能是暂时的)没有奏效的原因尚不清楚-如果问题再次出现,我将重新讨论该答案,我将设法找出实际的问题。