docker容器启动使用桥接模式无法上网问题排查
最近公司在搞CICD持续集成、持续交付,期间遇到过这样一种问题:GitLab Runner配置docker时设置limit=5、request_concurreny=5将任务的执行设置为并发执行,network_mode设置为host模式。这样就会有问题存在了,其中一个任务需要启动PG,在任务并行执行时会存在端口冲突问题导致任务执行失败。当时的解决办法是limit和request_concurre
docker容器启动使用桥接模式无法上网问题排查
1 问题描述
最近公司在搞CICD持续集成、持续交付,期间遇到过这样一种问题:GitLab Runner配置docker时设置limit=5、request_concurreny=5将任务的执行设置为并发执行,network_mode设置为host模式。
这样就会有问题存在了,其中一个任务需要启动PG,在任务并行执行时会存在端口冲突问题导致任务执行失败。当时的解决办法是limit和request_concurrency都设置成1让任务串行执行。
但这样的方式在少数任务执行影响并不大,直到有次submit时需要对所有服务都进行构建,导致串行执行时很多任务都处于pending状态,效率大打折扣。无奈,只能排查桥接为什么不能访问外网?
2 问题定位
刚开始排查时一直以为是要改GitLab Runner配置,想着是不是在配置里加上端口映射或者某个配置应该会解决问题。却忽视了问题的本质,导致排查时间过长仍没有找到解决办法(垃圾ChatGPT也顺着我的提问回答,误导我)。
其实问题的本质很容易找,job执行的时候使用的是容器,而改成桥接模式后容器无法联网,显而易见是docker的问题。
3 解决方法
定位到问题的根源后百度就很好找到答案了,最终找到了这个老哥的文章解决了。根本原因是容器采用桥接模式后需要开启转发,否则容器启动后,会没有网络
解决办法:配置/etc/sysctl.conf,添加net.ipv4.ip_forward=1即可,具体如下:
1. vim /etc/sysctl.conf修改net.ipv4.ip_forward配置
2. 添加一行:net.ipv4.ip_forward=1
3. 重启服务,让配置生效
systemctl restart network
4. 查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功
sysctl net.ipv4.ip_forward
5. 重启docker
service docker restart
参考文章
Docker之WARNING: IPv4 forwarding is disabled. Networking will not work(虚拟机配置网络异常:IPv4)解决方案
更多推荐
所有评论(0)