You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一环境运行多个Docker容器并实现容器间API通信

解决Docker容器间API连通问题的思路

核心问题根源

容器内的localhost指向容器自身的回环地址,而非宿主机或其他容器,所以直接用localhost:1026调用API必然失败。Docker Compose会自动创建专属桥接网络,同一网络内的容器可通过服务名互相访问。


1. 编写Docker Compose配置文件

创建docker-compose.yml,将两个服务定义在同一配置中,示例如下:

version: '3.8'
services:
  api-service:
    build: ./api  # 指向API项目的Dockerfile所在目录
    ports:
      - "1026:8080"  # 宿主机端口:容器内部应用监听端口(根据实际配置调整内部端口)
    restart: unless-stopped

  web-app-service:
    build: ./web-app  # 指向Web应用项目的Dockerfile所在目录
    ports:
      - "1028:8080"  # 同理调整内部端口
    depends_on:
      - api-service  # 确保API服务先启动(仅保证启动顺序,不保证服务就绪)
    restart: unless-stopped

注意:容器内部端口是Java应用实际监听的端口(比如Spring Boot默认8080),而非宿主机映射的1026/1028,务必对应正确。

2. 修改Web应用的API调用地址

将Web应用中所有调用API的地址从localhost:1026替换为api-service:容器内部API端口(比如api-service:8080)。

如果应用支持环境变量配置,更推荐通过环境变量注入地址,避免硬编码:

  • 在docker-compose.yml的web-app-service中添加环境变量:
    environment:
      - API_BASE_URL=http://api-service:8080
    
  • 在Java应用中读取该环境变量作为API基础地址。

3. 确保应用监听0.0.0.0

Java应用默认可能仅监听localhost(容器内部回环),导致其他容器无法访问。需要修改配置让应用监听所有网卡:

  • Spring Boot:在application.properties中添加server.address=0.0.0.0,或启动时加参数java -jar app.jar --server.address=0.0.0.0
  • 其他Java应用:参考对应框架的配置文档,调整监听地址为0.0.0.0

4. 验证连通性

启动服务后,可通过以下方式验证:

  • 进入Web应用容器测试API调用:
    docker-compose exec web-app-service curl http://api-service:8080/your-api-endpoint
    
  • 检查容器是否在同一网络:
    docker network inspect 你的compose项目名_default
    
    (默认网络名是docker-compose.yml所在目录名+_default)

内容的提问来源于stack exchange,提问作者V.T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:55:16