Yukang's Page

Docker compose初始化失败问题

2018-03-02

问题

今天在Docker Postgresql用户名和密码授权的问题上花了一些时间,问题是:

psql: FATAL: password authentication failed for user "postgres"

admin的用户名和密码是可以在docker-compose.yml里设置的,通常我们可以配置为:

postgresql:
image: postgres:latest
ports:
- "5434:5432"
volumes:
- ./data/pgsql:/var/lib/postgresql/data
- ./initialize/pgsql:/docker-entrypoint-initdb.d
environment:
POSTGRES_USER: postgres
POSTGRES_DB: postgres
secrets:
- pg_superuser_password

某个用户的密码可以在./initialize/pgsql目录的脚本里设置:

#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "postgres" <<-EOSQL
CREATE USER user WITH PASSWORD 'the-password';
ALTER USER user CREATEDB;
EOSQL

只是今天碰巧想修改一下这个密码,所以就把这个脚本里的密码修改了,然后执行命令:

docker-compose up --build -d --force-recreate

而后就一直出现上面的用户授权失败。

原因

刚开始一直认为是可能dockerfile配置得不对,结果花费了些时间。后来突然想到了,PG里数据初始化应该只是第一次做了,后续如果发现/var/lib/postgresql/data里已经有数据了就再也不会重新设置密码,这里是配置volume的,如果还未有重要数据把./data/pgsql删除了即可,或者应该是可以通过attach进入容器通过pg命令修改。

总结

最近在自己工作的项目都完全Docker化,感觉是配置来折腾用起来飞。最近也在做一个重度依赖Docker的项目,所以Docker的文档需要看完,特别是网络和数据存储那块,否则会花费不少时间折腾。

使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章