如何将 Docker 内部的 Spring Boot 应用程序连接到 PostgreSQL 外部

Posted

技术标签:

【中文标题】如何将 Docker 内部的 Spring Boot 应用程序连接到 PostgreSQL 外部【英文标题】:How to connect SpringBoot application inside Docker to outside PostgreSQL 【发布时间】:2019-03-05 10:04:37 【问题描述】:

我有 Java SpringBoot Web 应用程序在主机上工作。应用程序连接到 PostgreSQL 数据库。一切正常。操作系统 - Ubuntu 18。

现在我需要在 Docker 容器中移动应用程序,PostgreSQL 除外,它将保留在主机上。

我安装了 Docker,启动了容器,但我在 docker 中的应用程序无法使用默认设置 (localhost) 连接到 PostgreSQL 数据库。

这是我的 application.properties 文件:

spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/webdemodb
spring.datasource.username=postgres
spring.datasource.password=123
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL95Dialect
spring.jpa.generate-ddl=true

这是我的 Dockerfile

FROM java:8
WORKDIR /
ADD target/webaccount-1.0-SNAPSHOT.jar app.jar
EXPOSE 8080
RUN fc-cache -f -v
ENTRYPOINT ["java","-jar","/app.jar"]

我了解了 Docker 的网络,但没有找到解决方案。我需要设置什么?

【问题讨论】:

你也要暴露5432端口 From inside of a Docker container, how do I connect to the localhost of the machine?的可能重复 您的应用程序必须使用host 网络 Mohammad LB,据我所知,没有必要公开端口,因为它们按原样翻译。 【参考方案1】:

Artemiy,谢谢!为了简单的使用,我刚刚在运行容器时应用了下一个选项:

--network="host"

完整命令:

docker run -d -p 9000:8080 --network="host" --name webaccount webaccount:1.0

【讨论】:

以上是关于如何将 Docker 内部的 Spring Boot 应用程序连接到 PostgreSQL 外部的主要内容,如果未能解决你的问题,请参考以下文章

docker运行Spring Cloud使用外部IP

内部服务器错误 500,在 Docker 中访问 Spring 引导端点时

带有spring boot和kafka的docker内部信任库的问题路径

spring-boo hello world程序

spring-boot实战05:Spring Boo多环境配置及配置属性注入到对象

如何将 Spring-Boot Web 服务转换为 Docker 映像?