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

如何将Spring Boot Docker容器与PostgreSQL Docker容器连接

解决Spring Boot容器与PostgreSQL容器连接问题

错误原因分析

你执行docker run时,把--spring.datasource.url参数放在镜像名之后,而Docker的CMD使用的是exec格式(["./mvnw", "spring-boot:run"]),这会导致Docker将该参数当作独立命令去执行,而非传递给./mvnw,因此出现"找不到文件或目录"的错误。

解决方案

方案1:正确传递Spring参数到mvnw命令

修改docker run命令,将Spring参数作为./mvnw spring-boot:run的一部分,替换原命令:

docker run --name java-docker --rm -p 8080:8080 --network demo_full_stack_postgres java-docker ./mvnw spring-boot:run --spring.datasource.url=jdbc:postgresql://db:5432/customer

如果需要同时覆盖用户名和密码,可追加参数:

docker run --name java-docker --rm -p 8080:8080 --network demo_full_stack_postgres java-docker ./mvnw spring-boot:run --spring.datasource.url=jdbc:postgresql://db:5432/customer --spring.datasource.username=your_db_user --spring.datasource.password=your_db_pass

方案2:使用环境变量覆盖配置(推荐)

Spring Boot支持通过环境变量自动覆盖application.yaml中的配置,这种方式更符合Docker最佳实践:

docker run --name java-docker --rm -p 8080:8080 --network demo_full_stack_postgres \
  -e SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/customer \
  -e SPRING_DATASOURCE_USERNAME=your_db_user \
  -e SPRING_DATASOURCE_PASSWORD=your_db_pass \
  java-docker

注意:环境变量名需将配置中的驼峰/短横线格式转为大写,并用下划线分隔,比如spring.datasource.url对应SPRING_DATASOURCE_URL

额外检查项

  • 确认PostgreSQL容器已启动,且加入了demo_full_stack_postgres网络,容器名称为db(若数据库容器名称不是db,需将URL中的db替换为实际容器名)
  • 确认PostgreSQL容器内已创建customer数据库,且用户名、密码与你传递的参数一致
  • 数据库容器内部端口为默认的5432,容器间连接无需使用主机映射的5332端口(主机端口仅用于外部访问容器内的数据库)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:55:03