尝试使用官方postgres docker镜像:
docker run --rm -d \
--name my-postgres \
--network my-network \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=mysuperduperlongpwstring \
-e POSTGRES_DB=postgres \
-v /path/to/postgres/data/:/var/lib/postgresql/data
postgres
但是,当使用Go创建postgres连接时,
psqlInfo := fmt.Sprintf(
"host=%s port=%s user=%s password=%s dbname=%s sslmode=%s",
os.Getenv("DB_HOST"),
os.Getenv("DB_PORT"),
os.Getenv("DB_USER"),
os.Getenv("DB_PASSWORD"),
os.Getenv("DB_NAME"),
os.Getenv("DB_SSL_MODE"),
)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
panic(err)
}
最后我总是panic: pq: password authentication failed for user "postgres"
我没有任何其他方法来验证mysuperduperlongpwstring
:
- 尝试从docker容器内使用
psql -U postgres -d postgres --password
连接数据库,并给予任何密码都可以正常工作。 - 尝试在docker容器中更改密码,将得到
ERROR: must be superuser to alter replication roles or change replication attribute
也就是说,基本上下面的答案对我不再起作用了:
由于缺乏资源,我在启动docker时多次更改mysuperduperlongpwstring
,并相应地更改Go PW,但每次都以同样的失败告终。
请问问题出在哪里?如何使用官方postgres docker重置密码?
2条答案
按热度按时间0s0u357o1#
看起来你的超强密码中有特殊的字符,这导致了这个,看看这个question,我的建议是使用url.QueryEscape这样:
0yycz8jy2#
在一个docker容器中,假设你从一个空的卷开始,'postgres'将是一个超级用户,所以你不会得到关于它需要成为超级用户的错误。
我看到的唯一合理的解释是,要么你没有在你认为你运行了的地方运行psql,要么你没有从一个空卷开始,所以你的
docker run
命令只是启动了一个现有的数据库,因此你的“-e POSTGRES*”配置都被忽略了。所以无论如何,你要么没有连接到你认为你是什么,要么它没有按照你认为的方式配置。