我已经安装了一个 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/