不使用Docker Compose,如何通过docker run参数实现Docker容器互联?
解决方案:使用自定义Docker网桥实现容器间稳定访问
不用Docker Compose的话,自定义Docker网桥是最适合的生产级方案,它自带容器名DNS解析能力,彻底解决容器IP变动导致的访问失效问题,步骤全部通过docker run参数实现:
具体操作步骤
- 先创建一个自定义网桥(仅需执行一次):
docker network create my-app-bridge - 启动容器B时,指定加入这个网桥:
docker run --name container-b --network my-app-bridge [你的B容器其他启动参数] your-b-image:tag - 启动容器A时,同样加入这个网桥:
docker run --name container-a --network my-app-bridge [你的A容器其他启动参数] your-a-image:tag - 现在容器A里直接用容器名访问B的API即可:
fetch("http://container-b/api")
关键原理说明
自定义网桥和默认的bridge网桥最大区别是:内置了Docker DNS服务,会自动维护容器名到IP的映射。不管容器B重启多少次,只要容器名不变,容器A里的请求都会被正确解析到B的新IP,完全不用手动修改IP。
关于--add-host=host.docker.internal:host-gateway的说明
这个参数是用来让容器访问宿主机上的服务的,和容器之间互访的需求无关,对你当前场景没用,可以忽略。
未来新增容器C的适配
后续要加容器C并连接A时,只需要启动C时同样加上--network my-app-bridge参数,C里直接用http://container-a/xxx就能访问A的服务,同理A也能通过容器名访问C,无需额外配置。
内容的提问来源于stack exchange,提问作者charnould
相关产品推荐
相关产品推荐

