栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

更改Docker容器中的默认路由

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

更改Docker容器中的默认路由

如果我理解这个问题,问题是: 重新启动连接到多个网桥的容器时,如何优先使用网桥作为默认路由?

我搜索了可用选项并进行了一些测试,当容器连接到多个网桥时,我没有找到任何docker命令行选项来指定默认路由或首选网桥作为默认桥。当我重新启动连接到默认桥(

bridge
)和自定义桥(your
homenet
)的容器时,默认路由会自动设置为使用默认桥(gateway
172.17.0.1
)。这与您描述的行为相对应。

解决方案1:在运行命令中指定一个启动脚本,该脚本负责更改默认路由并启动您的容器必须运行的服务

docker run   --cap-add NET_ADMIN  # to allow changing net settings inside the container   --name container1   --restart always  # restart policy  your_image   /path/to/your_start_script.sh

your_start_script.sh

ip route del default ip route add default via 192.168.130.3# here goes instructions/services your container is supposed to run

该脚本必须在容器内可用,它可以在共享文件夹(

-v
选项)上,或者在使用Dockerfile构建映像时加载。

注意:在将容器连接到自定义网桥(

docker network connect homenetcontainer1
)之前,
your_start_script.sh
它将崩溃,因为默认路由与任何可用的网络都不对应。

我测试了将

ip route
内部
container1
运行的输出记录为
--restart always
,将其连接到自定义桥后,它具有所需的默认路由。

解决方案2:在容器启动事件中设置来自主机的容器默认路由

docker events --filter "container=container1" |  awk '/container start/ { system("/path/to/route_setting.sh") }'

其中

route_setting.sh
包含有关更改容器默认路线的说明:

pid=$(sudo docker inspect -f '{{.State.Pid}}' container1)sudo mkdir -p /var/run/netnssudo ln -s /proc/$pid/ns/net /var/run/netns/$pidsudo ip netns exec $pid ip route del default sudo ip netns exec $pid ip route add default via 192.168.130.3

此解决方案避免为容器授予特殊权限,并将路由更改责任转移给主机。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号