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

如何通过Postman或浏览器访问Docker Compose部署的容器?

问题描述
  • SpringBoot应用容器(端口映射1993:8080)、PostgreSQL容器(5432:5432)通过Docker Compose启动后,容器间通信正常(SpringBoot能连接数据库、操作Kafka集群)
  • 本地通过localhost:1993、容器IP、容器名访问SpringBoot接口时,Postman报错:

    Error: socket hang up

  • 浏览器访问简单的GET接口(返回"Hello")也无法成功
  • 环境:macOS Monterey 12.1、Docker Desktop 4.22 for Mac、Postman 10.20,关闭杀毒软件后问题依旧

用户提供的docker-compose.yml配置:

version: '3.1'
services:
  agcu_registration_db:
    container_name: agcu_registration_db
    image: 'postgres:13.1-alpine'
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=agcu_registration_db
    restart: unless-stopped
    ports:
        - "5432:5432"
    volumes:
        - ./postgres-data:/var/lib/postgresql/agcu_data

  customer-registration:
    container_name: customer-registration_c
    image: customer-registration_i
    build:
      context: .
    ports:
      - '1993:8080'
    extra_hosts:
      - "host.docker.internal:host-gateway"
    depends_on:
      - agcu_registration_db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://agcu_registration_db:5432/agcu_registration_db
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=postgres
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update

一、排查Postman代理问题

解决步骤:

  1. 打开Postman,点击右上角齿轮图标进入Settings
  2. 切换到Proxy选项卡
  3. 检查代理配置:
    • 如果开启了Global Proxy Configuration,直接关闭后重启Postman测试,大概率是代理拦截了本地到容器的请求
    • 要是必须保留代理,在Proxy Bypass里添加localhost:1993、127.0.0.1:1993,以及Docker容器所在子网(可通过docker network inspect <你的compose网络名>查看,通常是172.17.0.0/16这类)

二、排查Docker网络与容器配置问题

1. 确认端口映射是否生效

执行命令查看容器端口绑定状态:

docker ps

找到customer-registration_c容器的PORTS列,确认显示0.0.0.0:1993->8080/tcp或[::]:1993->8080/tcp。如果没显示,说明端口映射配置有误,检查docker-compose.yml里的ports格式(引号、端口顺序是否正确)

2. 检查SpringBoot绑定地址

SpringBoot默认绑定0.0.0.0,但如果配置或代码限制了绑定地址,会导致外部无法访问:

  • 打开SpringBoot的application.properties/application.yml,确认server.address设置为0.0.0.0
  • 进入容器内部测试端口可用性:
    docker exec -it customer-registration_c curl localhost:8080/你的接口路径
    

如果容器内能正常访问,说明应用本身没问题,问题出在外部访问链路

3. 检查Docker Desktop网络设置

  • 打开Docker Desktop偏好设置,进入Resources > Network,确认Allow the default Docker socket to be used已开启
  • 切换本地网络(比如从VPN切到普通WiFi)测试,部分VPN会干扰Docker端口映射
  • 重置Docker网络后重新启动服务:
    docker network prune
    docker-compose down -v
    docker-compose up --build
    

4. 检查本地端口占用与防火墙

  • 检查1993端口是否被其他进程占用:
    lsof -i :1993
    

如果有占用,修改docker-compose.yml的宿主端口(比如改成1994:8080)后重启

  • 检查macOS防火墙:进入系统设置 > 网络 > 防火墙,确认Docker Desktop被允许接收传入连接

三、其他排查点

  • 查看SpringBoot容器日志,确认应用正常启动并监听8080端口:
    docker logs customer-registration_c
    

找类似Tomcat started on port(s): 8080 (http)的日志

  • 尝试用host.docker.internal:1993访问,Mac上这个地址是宿主机器的别名,有时候能解决本地访问容器的网络问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:57:49