通过Dockerized Spring Boot应用程序填充Dockerized PostgreSQL数据库

时间:2020-10-15 11:15:48

标签: postgresql spring-boot docker

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

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

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

  1. 在Docker中运行Postgres服务器

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

enter image description here

  1. 输入PostgresServer,然后创建数据库'aa'

    sudo docker exec -it PostgresServer psql -U postgres

    创建数据库AA;

enter image description here 3.运行Sprint Boot Docker映像(这是发生问题的地方)

docker run -v /Users/juancesard.pineda/Desktop/brapi:/home/brapi/properties -d brapicoordinatorselby/brapi-java-server:v2

enter image description here

  1. 我检查了日志:它说数据库'aa'不存在,显然它存在于Postgres Server中

    org.postgresql.util.PSQLException:致命:数据库“ aa”不存在

enter image description here

一些其他信息:

  • Docker监听8080端口

  • Postgres服务器侦听端口5432

  • 我的application.properties文件如下:

    server.port = 8080 server.servlet.context-path = /用户/juancesard.pineda/Desktop/brapi/application.properties/种质

    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 =创建-放置 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文件中缺少一些配置?

提前谢谢

1 个答案:

答案 0 :(得分:2)

问题出在您的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