我在我的WSL2 Ubuntu上的https://0.0.0.0:4000(也可以作为https://local.phx-cd.shoepping.at:4000访问,在Ubuntu主机文件中Map到127.0.0.1)上运行一个简单的Web服务器。我可以从Ubuntu和Windows主机连接到它--到目前为止还不错。但另外,在我的Docker for Win与WSL2集成中,我运行了一个SelSelum Chrome容器,它连接和测试Web服务器上的东西(使用网桥),但它无法连接到它!
我连接到容器,并试图 curl 到Web服务器-连接被拒绝。因为我的电脑有双重引导,我试着切换到我的Linux发行版,在那里运行Web服务器,在Linux Docker中运行Selify,并连接到本地Web服务器。所以我认为这与WSL2有关。
我的docker-compose.yaml(我遗漏了Selify集线器配置)
selenium-chrome-local:
image: selenium/node-chrome-debug:3.141.59
restart: always
ports:
- 5901-5902:5900
volumes:
- /dev/shm:/dev/shm
- ../../temp:/home/seluser/Downloads
depends_on:
- selenium-hub-local
environment:
- SCREEN_WIDTH=1920
- SCREEN_HEIGHT=1080
extra_hosts:
- "local.phx-cd.shoepping.at:10.99.99.1"
networks:
- selgrid
- dockerhost
networks:
selgrid:
dockerhost:
driver: bridge
ipam:
config:
- subnet: 10.99.99.0/24
如果您需要更多配置,请告诉我。谢谢。
2条答案
按热度按时间yjghlzjz1#
您确定Ubuntu WSL2示例正在桥接运行吗?默认情况下,WSL2示例运行NAT‘d(而WSL1示例运行桥接)。因此,虽然Docker网络是桥接的,但如果没有一些额外的工作,它仍然无法访问NAT的WSL2虚拟机。
我非常肯定您遇到了WSL issue #4150中描述的根本问题。如果是这样的话,下面是一些值得尝试的事情。
选项#1-端口转发到WSL2示例
在GitHub问题中有几个建议的解决方法,但适用于您的情况的基本方法归结为将端口4000从Windows主机接口转发到WSL2示例的专用IP地址。在PowerShell中:
请注意,您需要在每次重新启动后执行此操作,或者设置一个在登录时运行的脚本,如GitHub问题中所述(请参阅此评论)。
选项#2-WSL1
我还建议,假设它适合您的工作流程,并且如果您的Web应用程序在其上运行,您可以简单地使用WSL1而不是WSL2。您可以通过以下方式进行尝试:
1.备份您现有的发行版(从PowerShell或cmd,使用
wsl --export <DistroName> <FileName>
1.使用
wsl --import <NewDistroName> <InstallLocation> <FileNameOfBackup> --version 1
将备份导入新的WSL1示例简单地更改版本是可能的,但我倾向于在这样做之前无论如何都要有一个备份,而且只要你在备份,你最好把原始版本留在原处。
可能的选项#3-
socat
转发或隧道虽然我没有直接测试您的特定用例,但我已经成功地尝试了WSL2中的
socat
。从外观上看,socat
可以用于从WSL2到(至少)Windows主机(Docker容器可以访问)的端口转发。请看这条评论,这是GitHub上关于与您相似的用例的一个例子。可能的选项#4-网桥模式下的WSL2
上面提到的GitHub线程还包含有关如何使用Hyper-V在WSL2接口上启用桥接模式的一些详细信息。我认为这需要Windows 10专业版或企业版。同样,如果端口转发或WSL1可以完成您所需的任务,那么在这种情况下,这可能是过度杀伤力。
b4wnujal2#
以管理员身份在PowerShell上运行以下命令:
将
{#requiredWindowsPort}
替换为将在浏览器中使用的端口将
{#requiredWSL2Port}
替换为您要连接到的在WSL2中运行的端口。