通过 Dockerized Spring Boot 应用程序填充 Dockerized PostgreSQL 数据库
Posted
技术标签:
【中文标题】通过 Dockerized Spring Boot 应用程序填充 Dockerized PostgreSQL 数据库【英文标题】:Populating a Dockerized PostgreSQL Database through a Dockerized Spring Boot Application 【发布时间】:2021-01-29 20:48:10 【问题描述】:我有一个在 Docker 中运行的 Postgres 服务器。在这个 Postgres 服务器中,我有一个名为“aa”的数据库。
我还有一个 Spring Boot 应用程序的 Docker 映像。在 Docker 中执行此映像时,应在数据库 'aa' 中创建数据库表。
为了实现这一点,我执行了以下步骤:
在 Docker 中运行 Postgres 服务器
docker run --name PostgresServer --e POSTGRES_PASSWORD=*** -d Postgres
输入 PostgresServer 然后创建数据库 'aa'
sudo docker exec -it PostgresServer psql -U postgres
创建数据库 AA;
3. 运行 Sprint Boot Docker Image(这就是问题所在)
docker run -v /Users/juancesard.pineda/Desktop/brapi:/home/brapi/properties -d brapicoordinatorselby/brapi-java-server:v2
我检查了日志:它说数据库 'aa' 不存在,显然它存在于 Postgres 服务器中
org.postgresql.util.PSQLException: FATAL: 数据库“aa”不存在
一些附加信息:
Docker 监听 8080 端口
Postgres 服务器侦听端口 5432
我的 application.properties 文件如下所示:
server.port = 8080 server.servlet.context-path=/Users/juancesard.pineda/Desktop/brapi/application.properties/germplasm
spring.datasource.url=jdbc:postgresql://host.docker.internal:5432/aa spring.datasource.username=postgres spring.datasource.password=jcpineda
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=false spring.jpa.properties.hibernate.hbm2ddl.import_files=sql/crops.sql、sql/lists.sql、sql/locations.sql、sql/people.sql、sql/programs.sql、sql/trials.sql、sql/ seasons.sql、sql/studies.sql、sql/breeding_methods.sql、sql/germplasm.sql、sql/attribute_defs.sql、sql/attribute_values.sql、sql/seed_lots.sql、sql/observation_units.sql、sql/crosses。 sql, sql/pedigree.sql, sql/events.sql, sql/images.sql, sql/observation_variables.sql, sql/observations.sql, sql/samples.sql, sql/allele_calls.sql, sql/genome_maps.sql, sql/references.sql, sql/vendor.sql
spring.mvc.dispatch-options-request=true
我的 application.properties 文件中是否缺少一些配置?
提前谢谢你
【问题讨论】:
保持sql独立于spring boot,你可以创建扩展postgres的docker镜像并在启动时执行你的sql,否则如果你使用flyway它会为你做的 我认为application.properties
文件通常是文本文件;您已将图像附加到您的问题中。您能否重写问题,列出您以纯文本而不是屏幕截图形式运行的相关源代码和命令?
【参考方案1】:
问题出在您的 application.properties 文件中。数据源 url 指向host.docker.internal
。这应该只在将 docker 容器内部的东西连接到主机上 docker 外部运行的东西时使用 (documentation)。您需要一个不同的解决方案,因为您的 Spring 服务器和 Postgres 服务器都在 docker 容器中运行。
您需要一个 Docker 网络,特别是一个桥接网络,来连接您的不同容器。 Docker Bridge Networks
试试这样的
运行此命令在 docker 中创建一个名为“brapi_net”的网络
$> docker network create --driver bridge network_name
运行 postgres 容器并将其链接到网络。像往常一样创建您的数据库模式。
$> docker run --name PostgresServer --network=network_name --e POSTGRES_PASSWORD=*** -d Postgres
$> sudo docker exec -it PostgresServer psql -U postgres
$> CREATE DATABASE aa;
对于 Docker 网络,容器名称充当服务器名称。修改您的 application.properties 以反映这一点
spring.datasource.url=jdbc:postgresql://PostgresServer:5432/aa
运行服务器容器并将其链接到网络。
$> docker run -v /Users/juancesard.pineda/Desktop/brapi:/home/brapi/properties --network=network_name -d brapicoordinatorselby/brapi-java-server:v2
【讨论】:
以上是关于通过 Dockerized Spring Boot 应用程序填充 Dockerized PostgreSQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章
dockerized postgres 和 dockerized Spring boot app
无法将 dockerized spring boot 应用程序连接到 dockerized postgresql
dockerized 环境中的 Keycloak 和 Spring Boot Web 应用程序
Dockerized Spring Boot 应用程序连接到主 MySQL [重复]
java.net.UnknownHostException 来自 Spring Boot 应用程序的 dockerized mysql