两个 compose 项目,想互相访问,试了 IP 能通,容器名不通。

原因:不同 compose 项目默认在不同的网络里,服务名解析不了。

解法:

  1. 建一个外部网络 docker network create shared
  2. 两个 compose 都声明 external: true 并加入
  3. 用服务名互相访问

注意:加入外部网络后,服务名要用 container_name 或者 compose 里的服务名,不是项目名。

另一个坑:nginx 启动时如果后端容器还没起来,DNS 解析失败会缓存失败结果,后续一直 502。要用变量 + resolver 让 nginx 每次重新解析。

主楼