如何解决:在gitlab-ci

时间:2019-07-15 13:17:34

标签: postgresql docker gitlab-ci psql postgresql-9.6

我目前正在尝试在Gitlab CI中进行植物学研究。 Fossology需要一个外部数据库,该数据库可以使用pg_dump创建的架构进行设置。当我尝试使用psql时,出现标题错误。

此刻,我有一个脚本来设置运行所需版本的postgres(9.6)的容器。然后,它尝试通过docker exec在postgres容器中通过psql运行.sql脚本。这样做会得到标题错误。

在发出psql语句时,我尝试同时指定端口和主机,但都不起作用。我尝试使用localhost,127.0.0.1,postgres容器的IP地址和该容器的名称作为主机。我曾尝试用不同的脚本重写内容,但似乎无济于事。

在Google进行了广泛搜索之后,许多人似乎有相同的错误消息,但并非出于相同的原因,通常在使用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

createBlank.sql:

create user fossy with password 'fossy';
create database fossology;
grant all privileges on database fossology to fossy;

预期结果:运行createBlank.sql创建一个名为fossology的空白数据库,然后从架构中构建fossology数据库

实际结果:psql:无法连接到服务器:连接被拒绝     服务器是否在主机“ 172.19.0.2”上运行并接受     端口5432上的TCP / IP连接?

1 个答案:

答案 0 :(得分:0)

确定要完全设置postgres吗?

您可以执行一些快速检查:

(对不起,您是这样做的。转到建议2)

建议1:您是否告诉postgres有一个使用密码的用户? (createuser命令)

https://www.postgresql.org/docs/9.2/app-createuser.html

建议2:您是否告诉postgres用户可以连接,以及如何连接? (TCP或本地套接字)

https://www.postgresql.org/docs/9.2/auth-pg-hba-conf.html