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

两个Docker化Spring Boot应用通过自定义Docker网络通信失败如何解决?

问题根因

Docker自定义网桥网络内置了DNS解析能力,同网络下的容器只能通过服务名/容器名互相访问,你之前的错误配置原因如下:

  • 用localhost访问时,指向的是当前Hello服务容器自身的环回地址,自然找不到运行在World服务容器的8082端口,触发连接拒绝错误
  • 用custom_net作为域名访问时,网络名称本身不具备DNS解析能力,所以会抛出未知主机异常
调整步骤
  • 修正Hello服务的application.yml配置,将world服务的访问地址改为容器名+容器内部端口:
server:
  port: 8081
services:
  world:
    url: http://world_service:8082/world

注:此处用的是World服务的容器名world_service,端口用的是World服务容器内部监听的8082端口,不需要使用宿主机映射的8092端口,同网络容器通信不需要走宿主机端口映射。

  • 修正docker-compose.yml的缩进错误,你原配置中hello_service下的networks、depends_on等字段缩进层级错误,需要和image、container_name字段保持同级,修正后的完整配置如下:
version: '3'
services:
  hello_service:
    image: 'openjdk:8-jdk-alpine'
    restart: always
    container_name: hello_service
    volumes:
      - ./deploy:/root
    networks:
      - custom_net
    depends_on:
      - world_service
    command: sh -c "java -jar -Dspring.config.location=file:///root/hello/application.yml  /root/hello/hello-0.0.1-SNAPSHOT.jar "
    ports:
      - 8091:8081

  world_service:
    image: 'openjdk:8-jdk-alpine'
    restart: always
    container_name: world_service
    volumes:
      - ./deploy:/root
    command: sh -c "java -jar -Dspring.config.location=file:///root/world/application.yml  /root/world/world-0.0.1-SNAPSHOT.jar "
    ports:
      - 8092:8082
    networks:
      - custom_net

networks:
  custom_net:
    driver: bridge
  • 重启服务生效:
docker-compose down && docker-compose up -d

内容的提问来源于stack exchange,提问作者mAsK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:08