docker-容器内无法访问外网

Dcr 1年前 ⋅ 2366 阅读

问题背景:
这两天调试openwrt想着用docker启一个ubuntu做监控服务器,却发现容器内的ubuntu server访问不了外网连宿主机的上级内网都访问不了.初步判断docker容器没有指定网络环境导致,然后在宿主机声明一个自定义网络环境
docker network create -d bridge --subnet xxx.xxx.xx.0/16 testNet ,结果创建完成之后openwrt ssh失联....
解决方案:
通过run启动容器时添加--net=host指定使用宿主机的网卡不虚拟网卡
关联docker网络环境知识
docker默认创建3个网络,分别是bridge,host,none
1.bridge(docker容器默认使用这个模式)
默认连接到docker0这个网桥上.
该模式下Docker Container不具有一个工有IP,因为宿主机的IP地址与verthpair的IP地址不在同一个网段内.
Docker次啊用NAT方式,将容器内部的服务监听的端口与宿主机的某一个端口port进行绑定,是的宿主机意外的世界可以主动将网络报文发送至容器内部.
NAT模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率
容器拥有独立、隔离的网络栈;
2.none网络模式
既不为Docker容器构造任何网络环境,不会为容器创建网络接口,一旦Docker容器采用了none网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境,容器只能使用127.0.0.1的本机网络。
3.host网络模式
Host模式并没有为容器创建一个隔离的网络环境.该模式下Docker容器会和Host宿主机共享同一个网络namespace,故Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信.
该模式下容器没有隔离的network namespace
容器ip地址和Docker host 的ip地址相同
需要注意容器中服务的端口号不能与docker host上已经使用的端口号相冲突
host模式能够和其他模式共存
用户自定义网络(User-defined networks)
可以根据需要创建尽可能多的网络,并且可以在任何给定的时间将容器连接到0或多个网络.
可以在不重启容器的情况下连接和断开网络中运行的容器.
当容器连接多个网络时他的外部连接是通过第一个非内部网络提供的.

全部评论: 0

    我有话说: