Docker容器之间互访
准备部署基于springboot+nacos+redis+mysql程序,每个组件都分别放到指定容器中,此时就遇到了一个问题,那就是容器之间怎么才能互相访问?下面介绍一下容器互访的解决方式。本文使用的centos是自定义的centos镜像,可以直接在容器中使用vim,ifconfig命令,该镜像对应的DockerFile见链接方式一、通过IP直接访问在宿主机上通过ifconfig可以看到,当我们在
准备部署基于springboot+nacos+redis+mysql程序,每个组件都分别放到指定容器中,此时就遇到了一个问题,那就是容器之间怎么才能互相访问?下面介绍一下容器互访的解决方式。本文使用的centos是自定义的centos镜像,可以直接在容器中使用vim,ifconfig命令,该镜像对应的DockerFile见链接
方式一、通过IP直接访问
在宿主机上通过ifconfig可以看到,当我们在宿主机上安装docker时,会默认创建一个内部的桥接网络docker0,每创建一个容器就会对应的分配一个虚拟网卡,容器之间可以通过ip直接访问
1、运行命令 docker run -it --name lcg mycentos:1.3 创建一个容器,并查看ip地址为:172.17.0.3
2、运行命令 docker run -it --name lcg1 mycentos:1.3 创建一个容器,并查看ip地址为:172.17.0.4
3、在两个容器之间互相ping对方,或者ping宿主机都能ping通
这样就可以实现容器之间及宿主机之间的互访了,但是这种方式在面对集群部署就显得不友好了,所以实际应用中很少用
方式二、通过使用link实现访问
通过link参数实现访问
1、使用命令docker run -it --name lcg mycentos:1.3 启动第一容器
2、启动第二个容器时,使用link参数
docker run -it --name lcg1 --link lcg:lcgsky mycentos:1.3
第二个容器命名lcg1,并将其连接到lcg容器中。注意--link lcg:lcgsky,lcg为容器名称,lcgsky表示网络/容器别名。实际使用过程中建议用相同名称,docker run -it --name lcg1 --link lcg:lcg mycentos:1.3 ,容器名称和别名一致的时候可以直接写成 docker run -it --name lcg1 --link lcg mycentos:1.3
3、查看 容器二中的hosts文件,cat /etc/hosts
可以看到 172.17.0.2 与 lcg 对应
4、在lcg1中ping lcg,及ping 172.17.0.2
可以正常ping通
5、在lcg容器中ping lcg1及172.17.0.3
可以发现ping lcg1不通,ping 172.17.0.3,可以ping通,这说明采用link方式有先后顺序,实际应用中如果多容器互访使用可能就不方便了。
方式三、通过自定义bridge访问
1、运行 docker network create lcgnet 创建一个新的bridge网络,并通过 docker network ls查看
2、通过指定网络的方式创建容器lcg
docker run -it --name lcg --network lcgnet --network-alias lcgsky mycentos:1.3
--network lcgnet :表示使用lcgnet网络
--network-alias lcgsky: 表示网络别名为lcgsky
2、使用相同方式创建容器lcg1
docker run -it --name lcg1 --network lcgnet --network-alias lcgsky1 mycentos:1.3
3、两个容器之间互访
4.推荐使用这种方法,若访问容器中服务,可以使用 网络别名加端口号访问 这用方式访问
更多推荐
所有评论(0)