我已经使用此命令docker composite up-d创建了一个docker映像,其中我能够在http://localhost:5050/browser/中加载pgAdmin示例,并在同一个文件中创建数据库和表,凭据工作正常。
然而,当我开始运行我的主Spring引导应用程序CustomerApplication时,它失败,并显示以下错误〉
- 组织. postgresql.实用程序. FATAL:用户密码验证失败(pgjdbc:自动检测到服务器编码为ISO-8859 - 1,如果消息不可读,请检查数据库日志和/或主机、端口、dbname、用户、密码、pg_hba. conf)**
我不知道出了什么问题,我的证件是正确的。看起来有什么问题?
下面是应用程序. yml和停靠-组合. yml
- 停靠-编写. yml**
services:
postgres:
container_name: postgres
image: postgres
environment:
POSTGRES_USER: amigoscode
POSTGRES_PASSWORD: password
PGDATA: /data/postgres
volumes:
- postgres:/data/postgres
ports:
- "5432:5432"
networks:
- postgres
restart: unless-stopped
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-pgadmin4@pgadmin.org}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
PGADMIN_CONFIG_SERVER_MODE: 'False'
volumes:
- pgadmin:/var/lib/pgadmin
ports:
- "5050:80"
networks:
- postgres
restart: unless-stopped
networks:
postgres:
driver: bridge
volumes:
postgres:
pgadmin:
- 应用程序. yml**
server:
port: 8080
spring:
application:
name: customer
datasource:
username: amigoscode
url: jdbc:postgresql://localhost:5432/customer
password: password
jpa:
hibernate:
ddl-auto: create-drop
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
show-sql: true
- 客户表脚本**
CREATE DATABASE customer
WITH
OWNER = amigoscode
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
2条答案
按热度按时间c9qzyr3d1#
由于我在本地安装并运行了一个postgres示例(端口 * 5432 *),微服务客户试图连接到该示例,而不是使用相同端口的docker示例。
解决方案是将URL端口从application.ymlurl:jdbc:数据库服务器数据库://本地主机:5433/客户
以及docker-compose.yml中的postgres端口
端口:-"* 5432 *:5432"
端口:-"5433:5432"
因此microservice连接到Docker映像中的postGres示例,而不是本地示例
然后重新运行docker命令docker composite up-d运行CustomerApplication(* SprinbgootApplication *),这一次应用程序通过创建customer表顺利启动。
mcdcgff02#
在创建角色
amigoscode
时,您实际上为它设置了密码吗?您可能以
postgres
超级用户身份登录pgadmin,创建了角色amigoscode
,但从未设置密码。编码问题看起来与指定的here类似,当提供的密码不正确时会出现该问题。看起来pgjdbc错误已于2014年修复,但是在〉= 42.2.x的更现代版本中可能已经退化,因为当前存在similar unresolved issue。其他可能的替代方案:
application.properties
文件,该文件的密码与application.yml
中的密码不同,并且优先级高于application.properties
中的密码。