带有 PostgreSQL 的 CI/CD 管道因“数据库未初始化且未指定超级用户密码”错误而失败
Posted
技术标签:
【中文标题】带有 PostgreSQL 的 CI/CD 管道因“数据库未初始化且未指定超级用户密码”错误而失败【英文标题】:CI/CD pipeline with PostgreSQL failed with "Database is uninitialized and superuser password is not specified" error 【发布时间】:2020-06-01 09:30:46 【问题描述】:我将 Bitbucket 管道与 PosgreSQL 一起用于 CI/CD。根据documentation PostgreSQL 服务在bitbucket-pipelines.yml
中的描述是这样的:
definitions:
services:
postgres:
image: postgres:9.6-alpine
到目前为止,它工作得很好。但是我所有最新的管道都失败了,并出现以下错误:
Error: Database is uninitialized and superuser password is not specified.
You must specify POSTGRES_PASSWORD for the superuser. Use
"-e POSTGRES_PASSWORD=password" to set it in "docker run".
You may also use POSTGRES_HOST_AUTH_METHOD=trust to allow all connections
without a password. This is *not* recommended. See PostgreSQL
documentation about "trust":
https://www.postgresql.org/docs/current/auth-trust.html
我该如何解决? bitbucket-pipelines.yml
文件没有变化,这可能是导致此类错误的原因..
【问题讨论】:
【参考方案1】:看起来原因是 docker 镜像的更新(github issue)。最新版本不允许在没有密码的情况下从任何地方连接到数据库。所以你需要指定用户名/密码:
definitions:
services:
postgres:
image: postgres:9.6-alpine
environment:
POSTGRES_DB: pipelines
POSTGRES_USER: test_user
POSTGRES_PASSWORD: test_user_password
或者如果你仍然不想使用密码,你可以设置POSTGRES_HOST_AUTH_METHOD=trust
环境变量:
definitions:
services:
postgres:
image: postgres:9.6-alpine
environment:
POSTGRES_HOST_AUTH_METHOD: trust
【讨论】:
如何打开这些设置? @LukasSalich 它在bitbucket-pipelines.yml
文件中。
最后,运行容器的错误命令存在不同的问题,因此不相关。【参考方案2】:
这是大约一周前的最新更改。避免它的一种方法是将您的 postgres 版本硬编码为不是最新的,例如更改为 postgres:9.5.18
或 postgres:9.5.20-alpine
另一种方法是传递假密码:
services:
db:
image: postgres
ports:
- "8001:5432"
environment:
- POSTGRES_PASSWORD=fake_password
在此处查看讨论:https://github.com/docker-library/postgres/issues/681
【讨论】:
【参考方案3】:如果您第一次通过 Docker 将 Django 连接到 PostgreSQL 时遇到问题,请将 POSTGRES_HOST_AUTH_METHOD: trust
添加到您的 docker-compose.yml
文件中:
db:
image: postgres:11
environment:
POSTGRES_HOST_AUTH_METHOD: trust
这为我解决了连接问题。
还请注意“这是不推荐的。请参阅有关“信任”的 PostgreSQL 文档:https://www.postgresql.org/docs/current/auth-trust.html”
【讨论】:
如果不建议这样做,为什么建议这样做?提醒它不被推荐是好的,但也提供你推荐它的原因或提供解决它的方法。肯定会有所帮助。只是一个意见。 解决这个问题的一个好办法是为超级用户指定一个 POSTGRES_PASSWORD。您可以使用“-e POSTGRES_PASSWORD=password”在“docker run”中设置以上是关于带有 PostgreSQL 的 CI/CD 管道因“数据库未初始化且未指定超级用户密码”错误而失败的主要内容,如果未能解决你的问题,请参考以下文章
带有 maven 的 gitlab CI/CD 不会在 application.properties 中设置环境变量
SelfMutate 阶段因 CodePipeline 而失败
为合并请求触发的管道运行应用 GitLab CI/CD 管道更改