postgresql - 如何修复:在 gitlab-ci 的 docker 容器中使用 Postgres 时出现“Psql:无法连接到服务器:连接被拒绝”
问题描述
我目前正在尝试在 Gitlab CI 中运行 fossology。Fossology 需要一个可以从使用 pg_dump 创建的模式设置的外部数据库。当我尝试使用 psql 时,出现标题错误。
目前,我有一个脚本来设置一个运行所需版本的 postgres (9.6) 的容器。然后它尝试在 postgres 容器中通过 psql 运行一个 .sql 脚本docker exec
。这样做后,它会出现标题错误。
我尝试在发出 psql 语句时同时指定端口和主机,但两者都不起作用。我尝试使用 localhost、127.0.0.1、postgres 容器的 IP 地址和容器的名称作为主机。我试过用不同的脚本重写东西,但似乎没有任何效果。
经过广泛的谷歌搜索,许多人似乎有相同的错误消息,但原因不同,通常在使用 docker 容器托管数据库时也不会。
当我在命令行中运行脚本的内容时,我没有收到此错误,脚本工作正常,我可以连接到 Fossology。仅在尝试在 Gitlab CI 中执行相同操作时才会出现此问题。
在 Mac 上使用命令行时工作的步骤顺序(即逐行粘贴):
# creates blank database and hosts it in a docker container
docker run -d --name fossdb -p 5432:5432 postgres:9.6
docker cp /fossology_db_schema.sql fossdb:/fossy.sql
docker exec -it fossdb bash
psql postgres -U postgres
# creates user needed for database to work with fossology
create user fossy with password 'fossy';
create database fossology;
grant all privileges on database fossology to fossy;
\q
# builds the fossology database in the hosted blank database
psql fossology < fossy.sql
psql postgres -U postgres
\connect fossology
exit
我在 GitLab CI 中尝试的内容:
# creates container with postgres image
docker run -d --name fossdb -p 5432:5432 --network foss-net postgres:9.6
# creates blank database (error occurs here)
docker exec fossdb psql -h $(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' fossdb) -f ./createBlank.sql -U postgres
# builds fossology database from schema
docker exec fossdb psql -h $(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' fossdb) fossology < ./schema.sql -U postgres
创建空白.sql:
create user fossy with password 'fossy';
create database fossology;
grant all privileges on database fossology to fossy;
预期结果:运行 createBlank.sql 创建一个名为 fossology 的空白数据库,然后从 schema 构建 fossology 数据库
实际结果: psql:无法连接到服务器:连接被拒绝 服务器是否在主机“172.19.0.2”上运行并接受端口 5432 上的 TCP/IP 连接?
解决方案
你确定你完全设置了postgres吗?
您可以执行一些快速检查:
(对不起,你确实这样做了。转到建议 2)
建议1:你告诉postgres有一个用户有密码吗?(创建用户命令)
https://www.postgresql.org/docs/9.2/app-createuser.html
建议 2:您是否告诉 postgres 用户可以连接,以及如何连接?(tcp 或本地套接字)
推荐阅读
- javascript - 在对象数组中按一个属性分组并计算另一个属性中的关键字出现次数?
- mysql - MySQL:如何跟踪视图中的更改
- html - Django模板没有加载没有错误
- python - 使用调试工具运行服务器问题
- javascript - 使用语言环境阿拉伯语进行 date.toLocaleDateString 转换在 Chrome 和 firefox 中产生不同的结果
- r - 为具有少量观察的组添加点到 geom_density_ridges
- r - 查找向量是否是另一个向量的子集的方法,包括该向量在 R 中具有重复值的顺序
- javascript - 如何在我的反应函数中传递我的主题类以进行风格化?
- python - 是否有一种简单的方法可以通过定义的 python 函数与 GPU 进行并行处理?
- css - 为下拉菜单的最后一个元素设置样式 React Native