Docker容器没网的解决方法

修复Docker容器网络连接问题
文章提供了一种解决Docker容器无法上网的方案,包括停止Docker服务,编辑配置文件添加DNS,关闭iptables和ip_forward,以及使用iptables的MASQUERADE规则来允许特定IP网段访问互联网。特别地,对于5G核心网,需要为它分配正确的IP网段以确保网络访问。最后,检查容器内网络连接是否恢复。

Docker容器没网解决方法

借鉴我师兄的一种解决方法。用这种方法还是没网,原因后面分析。

After A LOT of time trying to solve this issue I think I finally
found a solution in an ebook I found on the internet.

Here's the steps I took to solve the issue:

$ sudo service docker stop
$ sudo nano /etc/default/docker

Edit the file and uncomment the DOCKER_OPTS option modifying it to somthing like this:
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --iptables=false --ip-forward=false"

$ sudo su
$ echo 1 > /proc/sys/net/ipv4/ip_forward
// Add the IP range you want to have access to the internet
$ iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
$ service docker restart
$ exit

Now hopefully your containers have access to the internet again.

I hope to help someone :)
转载自github:
https://github.com/moby/moby/issues/36151#issuecomment-630548256

5G核心网教程


原因分析:

上面教程中有个下面这个指令

// Add the IP range you want to have access to the internet
$ iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE

这个是添加整个容器网段,这还不够。


解决方案:

因为上面这个是整个docker容器的网段
需要给5G核心网分配网段

按照上述教程一直运行命令行,直到运行到添加ip网段,我们先查看容器ip网段再用下面方法添加

// 先启动核心网,查看核心网ip(注意是docker-oai)
$ ifconfig

在这里插入图片描述

//我的是192.168.70.129,掩码是26
//先运行下面这行命令
$ iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
//再运行下面这个,添加核心网网段
$ iptables -t nat -A POSTROUTING -s 192.168.70.129/26 -j MASQUERADE

剩下的命令接着运行

接下来就可以检查是否有网了:先进入容器,然后ping或者apt update一下看看有没有网。

$ docker exec -it oai-amf bash
### 解决Docker容器访问的方法 为了使Docker容器能够访问外部网络,通常有几种方法可以实现这一目标。默认情况下,Docker 容器已经具备了一定程度上的外访问能力,这是因为 Docker 使用了宿主机的网络命名空间并创建了一个名为 `docker0` 的虚拟桥接设备[^1]。 然而,在某些特定场景下可能需要更复杂的配置来满足需求: #### 方法一:利用Host模式 在启动容器时指定`--network host`参数可以让容器共享宿主机的网络栈,从而获得与宿主机相同的IP地址和端口映射规则。这种方法简单直接,但是可能会带来安全风险以及端口冲突等问题[^2]。 ```bash docker run --network host my_image ``` #### 方法二:自定义Bridge网络 除了默认的bridge网络之外,还可以创建自己的用户定义 bridge 网络,并将容器连接到这个新网络上。这样做的好处是可以更好地控制容器之间的通信行为,并且不会受到原有NAT机制的影响[^3]。 ```bash # 创建一个新的bridge网络 docker network create my_bridge_network # 启动容器并将它加入到新建的bridge网络docker run --name=my_container --network=my_bridge_network -d nginx ``` #### 方法三:Macvlan 或 IPvlan 网络驱动 对于那些希望让多个容器拥有独立的真实 IP 地址的应用来说,macvlan 和 ipvlan 是两个不错的选择。它们允许容器直接接入物理交换机或路由器,就像普通的VM一样工作[^4]。 ```bash # 创建一个基于eth0接口的macvlan网络 docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o parent=eth0 my_macvlan_net # 将容器连入此macvlan网络 docker run --net=my_macvlan_net -it alpine ash ``` 上述三种方式都可以有效地解决Docker容器对外部互联的访问问题,具体采用哪种取决于实际应用场景和个人偏好。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值