如何在Docker容器中获取对应网桥IP或通过环境变量传入该IP
问题解答
是否可以直接从DUMMY网络内的容器获取网桥IP
默认场景下无法直接安全获取:
- 常规启动的容器默认没有权限读取宿主机的网络设备信息,看不到宿主机上的br-xxx网桥设备
- 特殊场景补充:如果容器只接入了DUMMY一个网络,且镜像内置了网络工具,可以通过读取容器默认网关的方式拿到网桥IP,执行命令:
ip route show default | awk '/default/ {print $3}'。该方案存在两个限制:一是多网络接入场景下默认网关不一定对应DUMMY网络的网桥IP,二是精简镜像大概率没有预装ip/route相关工具,不推荐生产环境使用。
推荐方案:通过环境变量传入网桥IP
这个方案安全稳定,无额外依赖,操作步骤如下:
- 先在宿主机执行命令获取DUMMY网络对应的网桥IP(也就是网络网关地址),无需手动解析ifconfig输出:
docker network inspect DUMMY --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}'
- 启动容器时通过
-e参数将IP注入环境变量:
docker run -e DUMMY_BRIDGE_IP=$(docker network inspect DUMMY --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}') [其他启动参数] 你的镜像名
- 如果你使用docker-compose编排,可以用如下方式配置:
首先在宿主机执行导出命令:
export DUMMY_BRIDGE_IP=$(docker network inspect DUMMY --format '{{range .IPAM.Config}}{{.Gateway}}{{end}}')
然后在docker-compose.yml中对应服务下添加环境变量配置:
services: 你的服务名: image: 你的镜像名 environment: - DUMMY_BRIDGE_IP=${DUMMY_BRIDGE_IP} # 其他配置省略
启动时直接执行docker-compose up -d即可自动注入IP。
内容的提问来源于stack exchange,提问作者Dave Acks
相关产品推荐
相关产品推荐

