docker中容器之间通信⽅式
容器之间通信的主要⽅式
1.通过容器ip访问
容器重启后,ip会发⽣变化。通过容器ip访问不是⼀个好的⽅案。
2.通过宿主机的ip:port访问
通过宿主机的ip:port访问,只能依靠监听在暴露出的端⼝的进程来进⾏有限的通信。
3.通过link建⽴连接(官⽅不推荐使⽤)
运⾏容器时,指定参数link,使得源容器与被链接的容器可以进⾏相互通信,并且接受的容器可以获得源容器的⼀些数据,⽐如:环境变量。
# 源容器:mysql
docker 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
直接通过 link的名字或者link时候取的别名就能进⼊:
通过link建⽴连接的容器,被链接的容器能 ping 通源容器,反过来不⾏。
在被链接的容器上查看环境变量
被链接容器会继承源容器的环境变量信息。
与/etc/hosts中的主机条⽬不同,如果重新启动源容器,则不会⾃动更新存储在环境变量中的IP地址。我们建议使⽤主机条⽬ /etc/hosts来解析链接容器的IP地址。
除了环境变量之外,Docker还将源容器的主机条⽬添加到/etc/hosts⽂件中。
docker进入容器如果重新启动源容器,/etc/hosts链接容器上的⽂件将使⽤源容器的新IP地址⾃动更新,从⽽允许链接通信继续。
4.通过 User-defined networks(推荐)
docker network来创建⼀个桥接⽹络,在docker run的时候将容器指定到新创建的桥接⽹络中,这样同⼀桥接⽹络中的容器就可以通过互相访问。
创建⽹络
docker network create test-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 /bin/bash
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论