dockerized postgres 和 dockerized Spring boot app

Posted

技术标签:

【中文标题】dockerized postgres 和 dockerized Spring boot app【英文标题】:dockerized postgres and 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... 【参考方案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

    创建网络

docker network create mynet

    使用创建的网络运行 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

    创建 jar 存档
mvn clean
mvn compile
mvn package 
    创建 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"]
    构建 spring boot 镜像 myapp

docker build -t myapp .

    运行 spring boot 容器

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

【讨论】:

以上是关于dockerized postgres 和 dockerized Spring boot app的主要内容,如果未能解决你的问题,请参考以下文章

在 Docker 中使用 Postgres 在 HA 中部署 Keycloak 时出现问题

利用docker和docker-compose部署Nextcloud服务(nginx-fdm-postgres)

dockerized postgres 和 dockerized Spring boot app

Postgres 和 Docker 在文件更改时重新部署

在 docker 的 pgadmin 中添加新的 postgres 服务器

postgres和mysql基于docker搭建以及phppgadmin和phpmyadmin的应用(个人备份用非教程)