【问题标题】:Populating a Dockerized PostgreSQL Database through a Dockerized Spring Boot Application通过 Dockerized Spring Boot 应用程序填充 Dockerized PostgreSQL 数据库
【发布时间】:2021-01-29 20:48:10
【问题描述】:

我有一个在 Docker 中运行的 Postgres 服务器。在这个 Postgres 服务器中,我有一个名为“aa”的数据库。

我还有一个 Spring Boot 应用程序的 Docker 映像。在 Docker 中执行此映像时,应在数据库 'aa' 中创建数据库表。

为了实现这一点,我执行了以下步骤:

  1. 在 Docker 中运行 Postgres 服务器

    docker run --name PostgresServer --e POSTGRES_PASSWORD=*** -d Postgres

  1. 输入 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

  1. 我检查了日志:它说数据库 '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文件通常是文本文件;您已将图像附加到您的问题中。您能否重写问题,列出您以纯文本而不是屏幕截图形式运行的相关源代码和命令?

标签: postgresql spring-boot docker


【解决方案1】:

问题出在您的 application.properties 文件中。数据源 url 指向host.docker.internal。这应该只在将 docker 容器内部的东西连接到主机上 docker 外部运行的东西时使用 (documentation)。您需要一个不同的解决方案,因为您的 Spring 服务器和 Postgres 服务器都在 docker 容器中运行。

您需要一个 Docker 网络,特别是一个桥接网络,来连接您的不同容器。 Docker Bridge Networks

试试这样的

  1. 运行此命令在 docker 中创建一个名为“brapi_net”的网络
    $> docker network create --driver bridge network_name

  2. 运行 postgres 容器并将其链接到网络。像往常一样创建您的数据库模式。
    $> docker run --name PostgresServer --network=network_name --e POSTGRES_PASSWORD=*** -d Postgres
    $> sudo docker exec -it PostgresServer psql -U postgres
    $> CREATE DATABASE aa;

  3. 对于 Docker 网络,容器名称充当服务器名称。修改您的 application.properties 以反映这一点
    spring.datasource.url=jdbc:postgresql://PostgresServer:5432/aa

  4. 运行服务器容器并将其链接到网络
    $> docker run -v /Users/juancesard.pineda/Desktop/brapi:/home/brapi/properties --network=network_name -d brapicoordinatorselby/brapi-java-server:v2

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 2019-11-06
    • 2015-12-03
    • 2020-05-17
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多