我创建了从 Spring Boot 应用程序到 docker 的连接,但出现错误
org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host
我使用了 org.postgresql.util.PSQLException: FATAL: no pg_hba.conf Entry for host 中的解决方案,并且附加了 ssl 查询参数,但它在
docker-compose.yml
: 中不起作用
services:
belt-microservice:
build: belt-microservices
container_name: belt-microservice
restart: always
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db-belt:5432/belt_microservices?ssl=true&sslmode=require
ports:
- "8080:8080"
depends_on:
- db-belt
db-belt:
image: postgres
container_name: db-belt
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
- POSTGRES_DB=belt_microservices
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- "5000:5432"
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
volumes:
pgdata:
最终出现在
org.postgresql.util.PSQLException: The server does not support SSL.
我尝试将网络添加到
docker-compose.yml
networks:
default:
external: false
但这只会导致另一个错误
org.postgresql.util.PSQLException: The connection attempt failed.
如何让postgres容器支持SSL或者避免主机输入错误?
我解决了这个问题,在数据库服务配置中为
PGDATA
的文件夹添加了自定义名称,如本答案中。
最后
docker-compose.yml
读作
services:
belt-microservice:
build: belt-microservices
container_name: belt-microservice
restart: always
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db-belt:5432/belt_microservices
ports:
- "8080:8080"
depends_on:
- db-belt
crossbelt-microservice:
build: crossbelt-microservices
container_name: crossbelt-microservice
restart: always
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db-crossbelt:5432/crossbelt_microservices
- BELT_URL=http://belt-microservice:8080
ports:
- "8082:8082"
depends_on:
- db-crossbelt
- belt-microservice
report-microservice:
build: report-microservices
container_name: report-microservice
restart: always
ports:
- "8083:8083"
db-belt:
image: postgres
container_name: db-belt
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
- POSTGRES_DB=belt_microservices
- POSTGRES_HOST_AUTH_METHOD=trust
- PGDATA=/var/lib/postgresql/data/belt/
ports:
- "5000:5432"
restart: always
db-crossbelt:
image: postgres
container_name: db-crossbelt
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
- POSTGRES_DB=crossbelt_microservices
- POSTGRES_HOST_AUTH_METHOD=trust
- PGDATA=/var/lib/postgresql/data/crossbelt/
ports:
- "5001:5432"
不知道要不要加
POSTGRES_HOST_AUTH_METHOD=trust
,不推荐。