Dcoker容器之间的通信非常重要,也一直被关注,容器通信分为两类,一类是单宿主机的相互通信,一类是跨主机的容器通信,本篇来进行一个介绍进行梳理,集合我现阶段的docker应用的一些总结分享。 容器重启后;ip会发生变化。通过容器ip访问不是一个好的方案。 通过宿主机的ip:port访问;只能依靠监听在暴露出的端口的进程来进行有限的通信。只能监听内网ip地址和端口,外网ip肯定不能放开 运行容器时;指定参数link;使得源容器与被链接的容器可以进行相互通信;并且接受的容器可以获得源容器的一些数据;比如环境变量。 直接通过 link的名字或者link时候取的别名就能进入 通过link建立连接的容器被链接的容器能 ping 通源容器反过来不行。 被链接容器会继承源容器的环境变量信息。 如果重新启动源容器;/etc/hosts链接容器上的文件将使用源容器的新IP地址自动更新;从而允许链接通信继续。 host模式,–net=host,会直接使用容器宿主机的网络命名空间。将不拥有自己独立的Network Namespace,它会使用宿主机的ip和端口。使用host模式优势就是效率高,但是缺点也很明显。 1.容器不再隔离,容器崩溃能导致宿主机崩溃。 2.容器内部不再拥有端口所有的资源,宿主机已经使用的资源容器不能再使用 docker network来创建一个桥接网络;在docker run的时候将容器指定到新创建的桥接网络中;这样同一桥接网络中的容器就可以通过互相访问。 跨宿主机的容器通信就是用宿主机的ip加上宿主机端口就可以,也可以启用内网域名等等。不再进行过多的描述。 上面就是我对于容器之间通信的总结,希望能帮助正在接触这块业务的朋友们,如果想跟我有更多的交流,欢迎关注我的头条号和微信公众号:Java时间屋 进行交流。文章目录
前言
一、单宿主机的容器间的通信:
1.1通过容器默认ip访问
1.2通过宿主机的ip:port访问
1.3通过link(不推荐):
源容器mysqldocker run -itd --name test-mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7 #被链接容器 centos docker run -itd --name test-centos --link test-mysql:mysql centos /bin/bash #进入test-centos docker exec -it test-centos /bin/bash
在被链接的容器上查看环境变量
与/etc/hosts中的主机条目不同如果重新启动源容器则不会自动更新存储在环境变量中的IP地址。我们建议使用主机条目 /etc/hosts来解析链接容器的IP地址。
除了环境变量之外Docker还将源容器的主机条目添加到/etc/hosts文件中。1.4host模式:
1.5自定义桥接网络networks(推荐):
创建网络docker network create t-network
启动容器时;加入创建的网络
docker run -it --network test-network --network-alias mysql -e MYSQL_ROOT_PASSWORD=123 mysql:5.7
启动被链接的容器
docker run -it --network test-network --network-alias centos centos
二、跨宿主机的容器通信:
总结