【问题标题】:dockerized postgres and dockerized Spring boot appdockerized postgres 和 dockerized Spring boot app
【发布时间】:2019-03-15 08:31:23
【问题描述】:

我的 application.properties 文件

server.port=8085
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://init-postgres:5432/dbname
spring.datasource.username=username
spring.datasource.password=password

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

对于 dockerizing postgres 我正在使用命令

docker run -d -p 5432:5432 --name init-postgres -e POSTGRES_DB=dbname -e POSTGRES_USER=username -e POSTGRES_PASSWORD=password postgres

但它给出了 java.net.UnknownHostException: init-postgres 我是 Docker 的初学者,并从教程中学习它。 dockerized Postgresql 和 Spring boot 应用程序通信。

【问题讨论】:

  • url 应该使用localhost...容器名称只有在你也对你的spring boot应用程序进行docker化并在同一个网络中运行它们时才有效。
  • @M. Denium 如何使用 mvn install 生成 docker 映像,因为每当我触发此命令时,它都会给出错误 java.net.UnknownHostException & build is failed
  • 如上所述使用localhost...

标签: spring postgresql docker spring-boot dockerfile


【解决方案1】:

如果您的应用程序在没有 docker 的主机上运行,​​并且您的数据库位于 docker 容器中,则需要更改此行:

spring.datasource.url=jdbc:postgresql://init-postgres:5432/dbname

spring.datasource.url=jdbc:postgresql://localhost:5432/dbname

相反,如果应用程序和数据库都在 docker 上运行,您需要引用 docker 容器名称,如您在上面发布的 sn-p 中所述。

我建议使用docker-compose,它是一个方便的工具,可以减轻部署的困难,并且在开发时也很有用,因为它允许启动和关闭您的应用程序而没有太多麻烦。在official docker website 中有一个很好的工具介绍和示例。

【讨论】:

    【解决方案2】:

    如果您需要在不使用 docker-compose 的情况下对它们进行 docker 化

    应用程序配置

    spring.datasource.url=jdbc:postgresql://init-postgres:5432/dbname

    1. 创建网络

    docker network create mynet

    1. 使用创建的网络运行 postgres 容器

    docker run --net mynet --name init-postgres -d -e POSTGRES_DB=dbname -e POSTGRES_USER=username -e POSTGRES_PASSWORD=password -p 5432:5432 postgres

    1. 创建 jar 存档
    mvn clean
    mvn compile
    mvn package 
    
    1. 创建 dockerfile
    FROM openjdk:8-jdk-alpine
    ARG JAR_FILE=target/<HERE_IS_NAME_OF_YOUR_JAR_FILE>.jar
    COPY ${JAR_FILE} myapp.jar
    EXPOSE 8085
    ENTRYPOINT ["java","-jar" , "/myapp.jar"]
    
    1. 构建 spring boot 镜像 myapp

    docker build -t myapp .

    1. 运行 spring boot 容器

    docker run --name myapp-container --net mynet -p 8080:8080 myapp

    【讨论】:

      猜你喜欢
      • 2018-11-13
      • 2019-11-06
      • 2020-12-31
      • 2019-09-04
      • 2021-03-07
      • 2020-04-09
      • 2017-12-29
      • 1970-01-01
      • 2021-01-29
      相关资源
      最近更新 更多