docker network_mode: \"host\" 网络配置方式
docker network_mode: "host" 网络配置
[root@ECS02 ~]# cat /etc/hostname ECS02 [root@ECS02 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.18.150.42 ECS02 ECS02 [root@ECS02 ~]# cat /etc/sysconfig/network # Created by anaconda
docker network 模式
Docker network 有五种模式:
- host 模式
- container 模式
- none 模式
- bridge 模式
- 用户 自定义
Host 模式
docker run -it --name myubuntu --net=host ubuntu /bin/bash
众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。
一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
例如,如果宿主机的Ip地址是192.168.1.100,使用host模式新建一个容器,加入容器中运行的是Nginx应用,绑定在容器的80端口上,外部主机可以直接通过192.168.1.100:80访问容器中的web应用,而使用docker run运行容器时不需要指定-p参数.即在使用host模式时,容器中的应用都直接绑定在宿主机的端口上,没有NAT转换.但容器的其他如文件系统等还是隔离的.
这种模式下,在容器中运行ifconfig命令会显示宿主机eth0的信息.
Container 模式
docker run -it --name myubuntu --net=container:NAME_OR_ID ubuntu /bin/bash
Container模式,顾名思义,就是在运行容器时通过--net指定另一个已经在运行的有单独Network Namespace的容器,然后与这个容器共享一个Network Namespace.在这种情况下,新建的容器没有自己的网卡,也不会给它分配IP,而是两个容器共享IP和端口空间.
此时,在当前容器中执行ifconfig命令会显示container指定的容器的eth0信息.
none 模式
docker run -it --name myubuntu --net=none ubuntu /bin/bash
none模式下,Docker会为新创建的容器分配自己的Network Namespace,但不会为这个容器的网络进行任何配置,容器也没有自己的IP网卡等信息,需我们为其配置.
bridge 模式
这是Docker的默认模式.
当Docker服务启动时,Docker会在宿主机上建立一个虚拟网桥docker0,宿主机上启动的容器会连接到这个虚拟网桥上.
Docker会在一个可用网段(一般是172.17.0.0/16这个网段)中为docker0分配一个IP地址(一般是172.17.0.1),而每创建一个使用bridge网络模式的新的容器,Docker就会在上面的网段中选择一个尚未分配的IP地址分配给容器的eth0网卡.
实际的网络配置过程是这样的:
Docker在主机上创建一对veth pair虚拟网卡设备,veth设备总是成对出现,它的工作模式类似于管道,数据从一头进去,从另一头出来.Docker将这对虚拟网卡的一段连接到容器的eth0端口上,另一端与docker0网桥相连.这样,docker容器就能与宿主机通信了.
在给docker容器分配IP时,默认将docker0的地址作为容器的网关.
用户自定义网络
用户可以通过Docker网络驱动器或其他的网络驱动器自定义网络。你可以将许多容器连接到同一个网络上,一旦连接到了自定义的网络上,容器之间就可以通过对方的IP地址和主机名来进行通信了。
如果容器连接到了用户自定义的网络上,容器的/etc/hosts文件会加入在同一个网络中的其他所有容器的IP地址。
由于容器有可能随时改变/etc/hosts文件,容器中的程序可能会读取到不完整的甚至空的/etc/hosts文件。通常重新读取可以解决这个问题。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇:docker配置daemon.json镜像加速文件方式
栏 目:其它服务器
本文标题:docker network_mode: \"host\" 网络配置方式
本文地址:https://zz.feitang.co/server/28623.html
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法





