一、同宿主机Docker网络通信机制
1、查看容器IP:
1、如果已经进入了容器则查看hosts文件即可:cat /etc/hosts、
2、如果没有进入容器则使用:docker inspect 查看其中的NetworkSettings下面的IPAddress字段即为容器IP;
2、容器访问宿主机 / 宿主机访问容器
- 宿主机ping容器
- 容器ping宿主机
- 容器访问外网
- 宿主机访问外网
- 外网访问容器,
外网访问容器,则需要通过端口映射,即宿主机的端口映射容器内服务的端口;
外界–>宿主机8080端口–>容器8080端口
(要求:宿主机8080端口 映射到 容器8080端口)
3、同宿主机中容器和容器之间的访问
同一个宿主机中,容器与容器之间的通信可以有几种实现方式:
1、通过容器本身的ip相互直接访问对方;
Tomcat互访、Redis互访、MySQL互访
这种方式会导致ip地址的硬编码写死,不方便迁移,容器重启后,ip可能会发生变化,容器启动时是随机生成的一个ip,通过容器ip访问不是一个好的方案,不推荐使用;
2、通过宿主机的ip:port访问
通过宿主机的ip:port访问,需要将宿主机的端口与容器的端口进行映射;
3、通过link建立连接(老版本使用,官方已经不推荐使用)
运行容器时,指定参数link,使得源容器与被链接的容器可以进行相互通信,并且接受的容器可以获得源容器的一些数据,比如:环境变量;
- 源容器:mysql
docker run -d --name test-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
#被链接容器 centos
docker run -d --name test-centos --link test-mysql:mysql centos
#进入test-centos
docker exec -it test-centos /bin/bash
然后在centos中直接通过 link的名字或者link时候取的别名就能进入:
mysql -h test-mysql -uroot -p123456
或者:
mysql -h mysql -uroot -p123456
通过link建立连接的容器,被链接的容器能 ping 通源容器,反过来不行;
4、通过自定义网络通信(官方推荐)
使用docker network命令创建一个桥接网络,在docker run的时候将容器指定到新创建的桥接网络中,这样同一桥接网络中的容器就可以相互访问;
查看当前宿主机有哪些桥接网络:
docker network ls
- 1、创建桥接网络
docker network create my-docker-network
- 2、启动容器时,加入创建的网络,并指定网络别名
docker run -d --network my-docker-network --network-alias mysql -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql
- 启动被链接的容器
docker run -d --network my-docker-network --network-alias mysql2 -e MYSQL_ROOT_PASSWORD=123456 docker.io/mysql
4、不同宿主机Docker容器之间通信
Docker跨宿主机通信目前有如下几种主流方法:
- 1、使用路由机制打通网络;
- 2、使用Open vSwitch(OVS)打通网络 ;
- 3、使用flannel来打通网络;
- 4、使用Quagga来实现自动学习路由;
- 5、借助openstack、k8s等方式打通网络;
下面我们介绍使用路由机制打通网络方案;
- a机192.168.10.128,容器网段172.18.0.1/16,a机起了容器ip是172.18.0.2
- b机192.168.10.129,容器网段172.17.0.1/16,b机起了容器ip是172.17.0.2
-
两台机分别配置路由表
a机,route add -net 172.17.0.0 netmask 255.255.255.0 gw 192.168.10.129
b机,route add -net 172.18.0.0 netmask 255.255.255.0 gw 192.168.10.128
添加好后,查看路由 route
然后a机ping b机容器,发现仍是ping不通,就是数据包会drop掉;
ip_forward配置
我们在b机上使用以下命令查看网络包转发情况,发现会丢失
iptables -t filter -nvL FORWARD
我们需要b机上配置,寻找172.17段ip的网络包不丢失,进行转发;文章来源:https://www.toymoban.com/news/detail-488249.html
a机器: iptables -I DOCKER -d 172.17.0.0/16 -j ACCEPT
b机器: iptables -I DOCKER -d 172.18.0.0/16 -j ACCEPT
-从而整个网络联通;
文章来源地址https://www.toymoban.com/news/detail-488249.html
到了这里,关于【Docker】三、docker网络通信机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!