使用nginx反向代理,实现windows主机直接访问WSL2中docker容器的bridge网络

wsl2中的网络映射到了localhost,也就是说在win上可以使用localhost:port访问到wsl2上的端口。但是wsl2中docker却存在问题,不能通过主机直接访问使用bridge桥接网络的容器内网ip,必须用docker映射端口后访问,这并非bug,因为wls2实质为虚拟机,不过这多少有些不便。如果容器使用host网络就没有这些问题了,可以直接通过localhost:port访问容器内端口。

但是使用bridge网络并且没有映射端口的容器该怎么解决呢?下面就展示一种使用nginx反向代理实现主机直接访问WSL2中docker容器bridge网络的方法。

教程

首先在wsl2安装nginx

1
sudo apt install nginx

安装完成后,你就应该能通过http://127.0.0.1/ 访问到nginx欢迎页了

如果你的wsl2已经启用了systemd,也可以通过systemctl status nginx查看nginx服务状态

启用systemd的方法可参考我的另一篇文章WSL2下使用systemd的最佳方案

1cede2af15560573416363ffc173c1e2/20230318172248.png

nginx如果正常运行,就可以进行下一步,编写nginx配置sudo vim /etc/nginx/sites-available/rp_server.conf,我这里设置的监听端口是801,可以自定义

1
2
3
4
5
6
7
8
server {
listen 801;
location / {
if ($request_uri ~ "/(.*)"){
proxy_pass $1;
}
}
}

启用配置

1
sudo ln -s /etc/nginx/sites-available/rp_server.conf /etc/nginx/sites-enabled/rp_server.conf

重启nginx服务

1
sudo systemctl restart nginx

完成!

成果

我的portainer容器用docker映射了9000端口,可以通过http://127.0.0.1:9000/ 访问

fc9c25f241f804effb3ad9a899a42b2f/20230318172308.png

上图可以看到,我的portainer容器内网ip为172.17.0.2,使用nginx反代,我通过http://127.0.0.1:801/http://172.17.0.2:9000/ 也可以访问到portainer

b6a455af23552b2b9ef56635d52dffb0/20230318172328.png

不映射端口启动一个python容器,启动一个http server

e0cfb32537c5c0d0cd3c53388c569b82/20230318172344.png

docker inspect查看到该容器ip为172.17.0.3,就可以通过nginx反代访问到该ip

5385c3d2a785c5254cb908cfa05cac7e/20230318172400.png

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2025 lorzzn
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信