如何获取宿主主机ip地址并设置HTTP-proxy

本文探讨了在WSL2下设置docker代理的方式

命令行内设置代理的第一步,就是在您的命令行环境下,实现实时获取当前主机的主机物理地址(ip:host)

介绍如何去获取您的主机物理地址

普通Linux环境/Git-Bash等环境获取您的主机物理地址

在普通liunx环境内,127.0.0.1是映射到主机物理地址的,而wsl2并不是这样

在git bash 中,因为git bash 是基于mingw的运行在Windows环境下的shell,

在git bash中,127.0.0.1可以映射到主机物理地址

1
2
3
export HOST_IP=127.0.0.1
export HOST_PORT=1080
export PORXY_ADDR="http://${HOST_IP}:${HOST_PORT}"

代理软件要允许局域网设备访问

wsl2环境下获取您的主机物理地址

注意:你的代理工具必须设置为允许来自局域网的连接

wsl2环境下需要获取宿主主机的物理IP地址

宿主主机的IP地址是动态生成的,其本质上是你计算机的物理IP,随着路由器分配而变化

每次重启PC后,wsl2获取到的宿主主机的ip地址都不一样

在WSL2环境下,我们有下面几种方式查看主机物理地址:

ip route命令(不推荐)

windows下,输入下面的命令获取:

1
ip route | grep default | awk '{print $3}'

使用wsl2提供的获取IP服务

WSL2 可以通过 /etc/resolv.conf 文件中的 nameserver 的值作为 IP 地址来访问 Windows 中的服务.

1
2
3
4
5
6
cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'
# 获取 nameserver 值 export 到环境变量 `HOST_IP` 中
# 然后填写`HOST_PORT`,请替换成你的 Windows 本地代理端口
export HOST_IP=$(grep -oP '(?<=nameserver\ ).*' /etc/resolv.conf)
export HOST_PORT=1080 # 某代理默认端口
export PORXY_ADDR="http://${HOST_IP}:${HOST_PORT}"

使用docker内置服务器host.docker.internal获取主机物理地址

host.docker.internal是一个虚拟网络地址

例如下面的这条命令

1
2
# HTTP [git]
git config --global http.https://github.com.proxy http://host.docker.internal:1080

Windows和MAC OS上都可以使用host.docker.internal

host.docker.internal 会解析出来你的宿主主机的物理ip地址。

在笔者电脑中,指的是笔者正在使用的WLAN网卡对应的IP V4 address。

WSL2下的localhost以及127.0.0.1并不能获取到宿主主机物理地址

你可以把host.docker.internal用在一切需要获取宿主主机物理地址的情况,前提是你的docker需要保持后台运行

1
2
3
4
5
# CUSTOM CONFIG
# export HOST_IP=$(grep -oP '(?<=nameserver\ ).*' /etc/resolv.conf)
export HOST_IP=http://host.docker.internal
export HOST_PORT=1080
export PORXY_ADDR="http://${HOST_IP}:${HOST_PORT}"

这里的 host.docker.internal 解析出来的是主机 IP,

MacOS 中还可以使用 docker.for.mac.localhost,

Win 环境还中使用 docker.for.win.localhost