function get_docker_host_ip(){
docker_host_ip="$(ip addr show docker0 | grep "inet " | awk '{print $2}' | cut -d\: -f2 | cut -d\/ -f1)"
export DOCKER_HOST_IP="$docker_host_ip"
}
这段代码是一个 Bash 函数,用于获取 Docker 容器的宿主机 IP 地址,并将其导出为环境变量 `DOCKER_HOST_IP`。下面是对这段代码的详细解释:
1. `function get_docker_host_ip(){...}`:定义了一个名为 `get_docker_host_ip` 的函数。
2. `docker_host_ip="$(ip addr show docker0 | grep "inet " | awk '{print $2}' | cut -d\: -f2 | cut -d\/ -f1)"`:这一行是函数的核心,用于获取 IP 地址。它的工作原理如下:
- `ip addr show docker0`:显示名为 `docker0` 的网络接口的详细信息。
- `grep "inet "`:从上一步的输出中筛选出包含 `inet ` 的行,`inet ` 后面通常跟着的是 IP 地址信息。
- `awk '{print $2}'`:使用 `awk` 工具打印筛选后行的第二列内容,通常是 IP 地址和子网掩码。
- `cut -d\: -f2`:使用 `cut` 工具以冒号 `:` 为分隔符,提取第二段内容,即 IP 地址部分。
- `cut -d\/ -f1`:再次使用 `cut` 工具,这次以斜杠 `/` 为分隔符,提取第一部分内容,即纯 IP 地址。
3. `export DOCKER_HOST_IP="$docker_host_ip"`:将获取到的 IP 地址赋值给环境变量 `DOCKER_HOST_IP`,这样在当前脚本或子进程中都可以访问这个环境变量。
举例说明:
假设你的 Docker 网络接口 `docker0` 的信息如下:
2: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 192.168.1.100/24 brd 192.168.1.255 scope global docker0
执行这段代码后:
- `ip addr show docker0` 会输出上述信息。
- `grep "inet "` 会筛选出 `inet 192.168.1.100/24 brd 192.168.1.255 scope global docker0` 这一行。
- `awk '{print $2}'` 会提取 `192.168.1.100/24`。
- `cut -d\: -f2` 会提取 `192.168.1.100/24`(因为这里没有冒号分隔符,所以整个字符串被提取)。
- `cut -d\/ -f1` 会提取 `192.168.1.100`。
最后,`export DOCKER_HOST_IP="192.168.1.100"` 将 `192.168.1.100` 这个 IP 地址设置为环境变量 `DOCKER_HOST_IP`,你可以在后续的脚本中使用这个变量来获取 Docker 宿主机的 IP 地址。