我使用的是Windows 10 1909,安装了WSL 2,使用的是Ubuntu 20. 04,19. 03. 13-beta2 Docker版本,使用WSL 2选项安装了Docker for Windows Edge版本。集成工作得很好,但我有一个问题无法解决。
在WSL 2示例上,有一些服务正在运行,并公开了一些端口(3000、3001、3002...),我需要从其中一个Docker容器访问特定开发场景(API Gateway)的服务,但这无法实现。
我试过直接使用WSL 2 IP地址,但是连接超时了。我也试过使用host.docker.internal
,它解析为WSL 2 IP地址以外的其他地址,但是仍然不起作用。
是否有特殊的技巧需要我拉,或者是这种路由目前不支持,但将是,或者这是由于一些其他原因不可能?
这说明了我正在努力实现的目标:
其他的路由也可以工作--也就是说,我可以从Windows浏览器访问来自WSL 2内部node.js进程的所有服务端口,也可以从WSL 2内部和Windows的容器访问公开的服务端口。
4条答案
按热度按时间yiytaume1#
因此,您需要在Windows计算机端口中执行的操作是转发您在WSL计算机上运行的端口,此脚本端口转发端口4000
在container docker运行命令中,您必须添加
或者如果您使用的是docker-compose:
在容器里你应该可以 curl 到
然后得到回应!
r7knjye22#
不管怎样:如果您使用WSL 2子系统IP地址,则此方案*有效。
如果您使用
host.docker.internal
,它不工作-这个DNS别名是在容器中定义的,但是它Map到Windows主机的IP地址,而不是WSL 2主机的IP地址,并且在WSL 2主机内部的路由不工作。为什么这个(可能是暂时的)不起作用的原因有点不清楚-如果问题再次出现,我会重新考虑这个答案,我设法追踪实际的问题可能是什么。
ntjbwcob3#
我在最新的Docker桌面上遇到了这个问题。我把它回滚到4. 2,它工作了。
我有一个java服务在linux本地主机上运行(使用ifconfig命令访问IP地址),我的其他容器使用基于WSL2的引擎在docker桌面上运行,它可以使用IP地址与我的java服务通信。
lf5gs5x24#
这听起来像是here讨论的问题。对我来说,唯一起作用的是用
--net=host
运行Docker容器,然后在容器中使用[::1]
而不是localhost来访问在WSL中运行的其他容器。例如,container 1使用docker run --net=host启动,然后像这样调用container 2:http://[::1]:8000/container 2(根据您的特定应用程序调整端口和路径)