docker容器间访问方式及实践

416 阅读2分钟

容器间如何进行相互访问,本文用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

image.png

3、seata-server配置文件中的地址配置成宿主机的ip和端口

image.png

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'

image.png

2、配置文件使用nacos容器的ip

image.png

3、seata-server正常启动即可访问

方式3:使用--link参数指定连接容器与别名,然后用别名访问(容器有启动先后关系,少量容器测试用时推荐,大量容器相互访问时不推荐)

1、nacos服务正常启动

2、配置文件使用nacos替换ip

image.png

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

image.png

2、配置文件使用nacos代替ip

image.png

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