Linux入门教程:Docker compose初始化失败问题, 原因 刚开始一直认


问题

今天在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的文档需要看完,特别是网络和数据存储那块,否则会花费不少时间折腾。

相关内容