Docker Compose中.NET应用无法连接数据库问题求助
问题描述
我创建了包含schoolsystem.api、mongo、postgresql三个服务的docker-compose.yml文件,遇到两个问题:
- 访问
http://localhost:8080/swagger时,浏览器提示“This site can’t be reached” - 访问获取所有学科的接口
http://localhost:8080/api/v1/subjects/list时,出现5432端口连接错误
已添加depends_on配置,但问题仍未解决,附上docker-compose.yml代码:
version: '3.4' services: schoolsystem.api: image: schoolsystem.api build: context: . dockerfile: SchoolSystem.API/Dockerfile ports: - "8080:8080" depends_on: - postgresql - mongo mongo: image: mongo:latest container_name: mongodb-container ports: - "27017:27017" volumes: - mongodb-data:/data/db postgresql: image: postgres container_name: postgresql-container ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=schoolsystem volumes: mongodb-data: driver: local pgdata:
解决方案
解决5432端口连接错误
- 修正数据库连接地址:
schoolsystem.api的配置文件里,PostgreSQL连接地址不能写localhost:5432,要改成postgresql:5432。Docker Compose会自动为服务创建内部DNS解析,用服务名postgresql就能直接访问对应容器,而非宿主机的localhost。 - 确保PostgreSQL就绪后再启动API:
depends_on仅保证容器启动顺序,不代表数据库已完成初始化并可接受连接。给PostgreSQL添加健康检查,确保就绪后再启动API:
修改postgresql服务配置:
同步修改postgresql: image: postgres container_name: postgresql-container ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=schoolsystem healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d schoolsystem"] interval: 5s timeout: 5s retries: 5schoolsystem.api的depends_on规则:schoolsystem.api: # 其他配置保持不变 depends_on: postgresql: condition: service_healthy mongo: condition: service_started # 若Mongo也需等待就绪,可同理添加健康检查
解决8080端口无法访问
- 排查API容器启动状态:执行
docker-compose logs schoolsystem.api查看API服务日志,确认是否有启动失败、端口配置错误等问题(比如API实际监听的不是8080端口)。 - 验证端口映射情况:执行
docker ps查看schoolsystem.api容器的端口映射是否显示0.0.0.0:8080->8080/tcp,若没有,检查Dockerfile的EXPOSE配置和API的启动端口是否一致。 - 检查端口占用与防火墙:用
netstat -ano | findstr :8080(Windows)或lsof -i :8080(Linux/macOS)确认宿主机8080端口是否被其他程序占用,同时检查防火墙是否拦截了该端口的访问。
内容的提问来源于stack exchange,提问作者Vagner Wentz
相关产品推荐
相关产品推荐

