如何通过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代理问题
解决步骤:
- 打开Postman,点击右上角齿轮图标进入Settings
- 切换到Proxy选项卡
- 检查代理配置:
- 如果开启了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
相关产品推荐
相关产品推荐

