java - 如何在 Digital Ocean 上的同一个 Droplet 中使用 postgresql 和 spring boot 应用程序

标签 java postgresql spring-boot docker digital-ocean

我已经安装了一个 postgres docker 容器和 spring boot 应用程序作为另一个 docker 容器。 但Spring boot应用程序无法连接到数据库。

这是我的数据库连接代码:

# name is used in quartz scheduling initial table creation in db
spring.datasource.name = postgresql
# postgresql, mysql, all, h2 etc, default is all
# spring.datasource.platform = postgresql
spring.datasource.url = jdbc:postgresql://<public_ip_address>:5432/production_db
spring.datasource.username = postgres
spring.datasource.password = 1234

请注意,Digital Ocean 也有私有(private) IP 地址。我也尝试过。即使使用 localhost 和 127.0.0.1

我按如下方式运行 postgres:

docker run -d --rm -p 5432:5432 --name pg-docker -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=1234 -v $HOME/docker/volumes/postgres/:/var/lib/postgresql/data postgres:11.0
psql -U postgres -h localhost -c "CREATE DATABASE production_db"

我的 Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY build/libs/*.jar app.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","/app.jar"]

以下是 docker-compose.yml 文件。

version: '3'
services:
  postgresql:
    image: "postgres:11.0"
    container_name: "postgresql"
    ports:
      - "5432:5432"
    volumes:
      - $HOME/docker/volumes/postgres/:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=1234

  api:
    build: .
    container_name: "api"
    ports:
      - "8081:8081"
    depends_on:
      - postgresql

当我尝试 docker-compose up --build 时,它也显示连接错误。 数据源行: spring.datasource.url = jdbc:postgresql://postgresql:5432/production_db

最佳答案

请使用 docker compose 部署应用程序和数据库,然后使用 docker compose 服务名称而不是 public_ip_address。

同样,我在这个示例应用程序中使用了 mysql:https://github.com/jinternals/micrometer

  datasource:
    url: jdbc:mysql://mysql:3306/micrometer
    username: user
    password: password

关于java - 如何在 Digital Ocean 上的同一个 Droplet 中使用 postgresql 和 spring boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59297764/

相关文章:

java - 为什么这段代码会抛出异常?

java - 多部分表单数据不调用 Web 服务 API

java - 在 Intellij IDEA 中创建基于 Gradle 的 Web 应用程序

postgresql - 如何在psql中切换数据库?

java - Spring Boot 2 - 在初始化 bean 之前做一些事情

java - setDataVector - javax.swing.Table

PostgreSQL 窗口函数和日期之间的区别

sql - Postgres 约束和外键

gradle - 带有gradle和log4j2的Spring Boot未记录到文件

java - 通过 JDBC URL 使用 TestContainers DB 但与 @Rule 一起使用时出错