我目前正在尝试在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连接?
答案 0 :(得分:0)
确定要完全设置postgres吗?
您可以执行一些快速检查:
(对不起,您是这样做的。转到建议2)
建议1:您是否告诉postgres有一个使用密码的用户? (createuser命令)
https://www.postgresql.org/docs/9.2/app-createuser.html
建议2:您是否告诉postgres用户可以连接,以及如何连接? (TCP或本地套接字)