如何让两个 docker-compose 项目中的容器互相通信
在使用 Docker 时,创建一个共享的外部网络。让不同应用能轻松地通过容器名互相访问。

· 1 min read
由于部署了很多中转代理服务以及各种客户端,常常会遇到多个docker容器间通信的问题。例如,为了解决New-API以及OpenWebUI两个容器间的通信,减少API时延,之前都是采用放在同一个docker-compose中管理,在内部创建一个网络并接入。
这样也可以实现使用http://newapi:3000/v1
的优雅方式访问。
随着docker-compose文件的越来越长,维护难度越来越高,越来越像一个大杂烩。我又学习了另外一种创建外部网络的方式。
思路是:我们创建一个独立于任何 docker-compose 文件的共享网络,然后让两个不同的 docker-compose 项目都连接到这个网络上。
创建共享网络 #
运行以下命令来创建一个新的桥接网络。我们就叫它 shared-net。
docker network create shared-net
这个网络现在独立存在,不受任何 docker-compose 文件的 up 或 down 命令影响。
修改不同容器所在的 docker-compose.yml #
编辑容器的 docker-compose.yml 文件,让它连接到我们刚刚创建的 shared-net。
只需要编辑两个地方:
# 例如在 new-api 项目的 docker-compose.yml 文件中
services:
new-api:
# ... (它所有现有的配置都保持不变) ...
networks: # 1.给 new-api 服务添加这个 networks 块
- some-other-network # 它可能已经连接了其他网络,保留它们
- shared-net # 额外连接到我们的共享网络
# 2. 在文件末尾声明这个网络是外部的
networks:
some-other-network:
# ...
shared-net:
external: true
之后,重启容器。
现在,因为不同容器都在 shared-net 这个网络里,它们可以通过容器名直接通信。要访问 「new-api」 ,地址应该填写:http://new-api:3000
。