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
在 docker 的 pgadmin 中添加新的 postgres 服务器
postgres和mysql基于docker搭建以及phppgadmin和phpmyadmin的应用(个人备份用非教程)