容器间如何进行相互访问,本文用2个容器举例,如seata-server容器需要注册到nacos,需要在配置文件中提供nacos容器的访问地址,实现方式有4种 如下:
方式1:nacos容器端口映射到宿主机 其他容器通过宿主机ip+端口访问(简单但不推荐,宿主机ip变了还要改配置麻烦)
1、nacos普通启动,命令:
docker run --env MODE=standalone --name nacos -d -p 8848:8848 -p 9848:9848 nacos/nacos-server
2、查看宿主机ip
3、seata-server配置文件中的地址配置成宿主机的ip和端口
4、seata-server普通方式启动即可访问到nacos容器 docker run --name seata-server -d -p 8091:8091 -p 7091:7091 -v D:\docker\seata\resources:/seata-server/resources seataio/seata-server:1.4.0
方式2:找到nacos容器本身的ip(简单但不推荐,容器重启后ip会变化)
1、 docker inspect nacos | grep -i 'ipaddress'
2、配置文件使用nacos容器的ip
3、seata-server正常启动即可访问
方式3:使用--link参数指定连接容器与别名,然后用别名访问(容器有启动先后关系,少量容器测试用时推荐,大量容器相互访问时不推荐)
1、nacos服务正常启动
2、配置文件使用nacos替换ip
2、seata-server启动命令:docker run --name seata-server -d -p 8091:8091 -p 7091:7091 -v D:\docker\seata\resources:/seata-server/resources --link nacos:nacos seataio/seata-server:1.4.0
其中--link后的第一个nacos是容器名称,第二个nacos为容器别名(seata-server容器使用别名访问nacos容器)
方式4:给容器创建网络,然后用别名访问(推荐)
1、创建bridge网络 docker network create nacos_network
2、配置文件使用nacos代替ip
3、如果容器第一次启动 命令:
docker run --env MODE=standalone --name nacos -d -p 8848:8848 -p 9848:9848 --network nacos_network --network-alias nacos nacos/nacos-server
docker run --name seata-server -d -p 8091:8091 -p 7091:7091 -v D:\docker\seata\resources:/seata-server/resources --network nacos_network --network-alias seata-server seataio/seata-server:1.4.0
4、如果启动时没加入网络,使用命令加入退出 docker network disconnect nacos_network seata-server
docker network connect nacos_network seata-server