准备部署基于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.推荐使用这种方法,若访问容器中服务,可以使用 网络别名加端口号访问 这用方式访问

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐