docker - 如何从 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 地址以外的其他内容,但它仍然无法正常工作。
是否有我需要拉的特殊技巧,或者目前不支持这种路由,但会支持,或者由于其他原因,这是不可能的?
这说明了我想要实现的目标:
其他路由工作 - 即我可以从 Windows 浏览器访问来自 WSL2 中的 node.js 进程的所有服务端口,并且我可以从 WSL2 内部和 Windows 中的容器访问公开的服务端口。只是这个缺失的环节我无法工作。
解决方案
值得一提的是:如果您使用 WSL2 子系统 IP 地址,则此方案有效。
如果您使用它不起作用-host.docker.internal
此 DNS 别名是在容器中定义的,但它映射到 Windows 主机的 IP 地址,而不是 WSL2 主机的 IP 地址,并且返回 WSL2 主机内部的路由不起作用。
这(可能暂时)不起作用的原因有点不清楚 - 如果问题再次出现,我将重新审视这个答案,并且我设法找出实际问题可能是什么。
推荐阅读
- sql-server - 使用 where in 子句选择唯一行 (SQL Server)
- javascript - 如何从 Google 表单弹出下拉列表中选择一个选项 Puppeteer NodeJS
- python - Numpy 在我无法剥离的数组的每个元素之后添加一个点
- json - 可以使用 xdmp.save 保存 ndjson 文件吗?
- wso2 - Wso2 APIM - 更新使用者密钥 hXXXXX8a 和用户管理员的访问令牌时出错
- c# - 将子表单文本框值传递回主表单
- vba - 突出显示在表单字段文本框中找到的匹配字符串,来自表格或静态数组(使用 MS Access)
- http - 如何找到我的 cookie 的资源和来源?
- sql - SQL将新列添加为任意计算字段(Postgres / redshift)
- xamarin - F# Fabulous Xamarin:外部事件订阅