Gitlab-ce docker - "PG::ConnectionBad: could not connect to server: No such file or directory"



我已经使用gitlab-ce一段时间了,现在通过运行docker-compose pull更新它后,它无法启动,并出现此错误。

git_1          | Recipe: gitlab::database_migrations
git_1          |   * bash[migrate gitlab-rails database] action run
git_1          |     [execute] rake aborted!
git_1          |               PG::ConnectionBad: could not connect to server: No such file or directory
git_1          |                Is the server running locally and accepting
git_1          |                connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"?
git_1          |               /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in `block (3 levels) in <top (required)>'
git_1          |               /opt/gitlab/embedded/bin/bundle:23:in `load'
git_1          |               /opt/gitlab/embedded/bin/bundle:23:in `<main>'
git_1          |               Tasks: TOP => gitlab:db:configure
git_1          |               (See full trace by running task with --trace)
git_1          |     
git_1          |     ================================================================================
git_1          |     Error executing action `run` on resource 'bash[migrate gitlab-rails database]'
git_1          |     ================================================================================
git_1          |     
git_1          |     Mixlib::ShellOut::ShellCommandFailed
git_1          |     ------------------------------------
git_1          |     Expected process to exit with [0], but received '1'
git_1          |     ---- Begin output of "bash"  "/tmp/chef-script20200629-25-idzu10" ----
git_1          |     STDOUT: rake aborted!
git_1          |     PG::ConnectionBad: could not connect to server: No such file or directory
git_1          |        Is the server running locally and accepting
git_1          |        connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"?
git_1          |     /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in `block (3 levels) in <top (required)>'
git_1          |     /opt/gitlab/embedded/bin/bundle:23:in `load'
git_1          |     /opt/gitlab/embedded/bin/bundle:23:in `<main>'
git_1          |     Tasks: TOP => gitlab:db:configure
git_1          |     (See full trace by running task with --trace)
git_1          |     STDERR: 
git_1          |     ---- End output of "bash"  "/tmp/chef-script20200629-25-idzu10" ----
git_1          |     Ran "bash"  "/tmp/chef-script20200629-25-idzu10" returned 1
git_1          |     

在我的docker compose中没有postresql——从来没有,也很好。

在docker/git文件中的postresql日志中,我发现了以下内容:

FATAL: database files are incompatible with server 
DETAIL: The data directory was initialized by PostgreSQL version 10, which is not compatible with this version 11.7.

如何将git数据迁移到新版本的postresql?它真的是gitlab ce更新过程的一部分吗?通常情况下,这只是码头工人的拉动,而且工作得很好。

我想我也遇到了同样的问题。将我的gitlab ce docker容器从12.9.10升级到13.1.2。

在那之后,出现了与您描述的相同的错误。由于gitlab在其docker容器中有自己的postgresql(可能经过修改?),我尝试使用默认的prosresql安装将数据库从版本10迁移到版本11。

使用docker compose启动容器会在其中启动gitlab。由于数据库故障,容器每分钟都会重新启动一次。我们不希望在迁移工作中出现这种情况。所以我们手动启动它并访问其中的bash

我手动启动的方式:

docker run --rm 
--hostname gitlab.example.org 
--publish 8143:443 --publish 8180:80 
--env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.org'; letsencrypt['enabled'] = false" 
--name gitlab_custom 
--volume /srv/gitlab/config:/etc/gitlab 
--volume /srv/gitlab/logs:/var/log/gitlab 
--volume /srv/gitlab/data:/var/opt/gitlab 
-it gitlab/gitlab-ce:latest /bin/bash

首先,运行默认的入口脚本来检查它是否真的不起作用!

/assets/wrapper

如果Recipe: gitlab::database_migrations部分出现故障,并且至少出现错误消息Error executing action 'run' on resource 'bash[migrate gitlab-rails database]',请继续迁移数据库。

我们需要安装默认的(旧的和新的)PostgreSQL版本。

apt update
apt install postgresql-10 postgresql-11

为迁移的数据库创建目标文件夹,并将目录所有者更新为gitlab psql。我们假设"旧"(版本10)数据库数据位于/var/opt/gitlab/postgresql/data。

mkdir -p /tmp/11/data
chown -R gitlab-psql /tmp/11 /var/opt/gitlab/postgresql/data

现在我们需要初始化新的数据库结构。

sudo -u gitlab-psql /usr/lib/postgresql/11/bin/initdb -D /tmp/11/data

查看/var/opt/gitlab/postgresql/data/postgresql.conf以获取正确的端口(并使用-p进行设置)。

在运行真正的迁移之前,我们应该检查数据库的访问权限和模式。如果出现错误,此命令可以多次运行。

sudo -u gitlab-psql /usr/lib/postgresql/11/bin/pg_upgrade -D /tmp/11/data -d /var/opt/gitlab/postgresql/data/ -v -b /usr/lib/postgresql/10/bin -B /usr/lib/postgresql/11/bin/ -p 5432 --check

如果在检查过程中出现错误,您可能需要更新一些其他目录权限。

如果检查成功,请使用以下命令执行数据库迁移。这可能需要一些时间,具体取决于gitlab实例的大小。

sudo -u gitlab-psql /usr/lib/postgresql/11/bin/pg_upgrade -D /tmp/11/data -d /var/opt/gitlab/postgresql/data/ -v -b /usr/lib/postgresql/10/bin -B /usr/lib/postgresql/11/bin/ -p 5432

停止所有gitlab服务,备份旧数据库,并将迁移的数据移动到原始路径。

gitlab-ctl stop
rm -f /var/opt/gitlab/postgresql/.s.PGSQL.5432*
mv /var/opt/gitlab/postgresql/data /var/opt/gitlab/postgresql/data_old_10
mv /tmp/11/data /var/opt/gitlab/postgresql/data

现在运行默认的入口脚本来完成内置的gitlab迁移。

/assets/wrapper

如果它有效(加载gitlab部件后会出现一些日志输出,当然网站也有效),您可以按Ctrl+C,然后输入exit以离开并删除当前容器。

如果仍然存在数据库错误。。。哎呀。

如果出现这样的错误,

PG::ConnectionBad: could not connect to server: No such file or directory
|                Is the server running locally and accepting
|                connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"?

请确保没有postgresql进程正在运行,删除套接字文件,然后重试。

之后,离开容器。

按照默认方式启动gitlab容器。

希望能有所帮助🙂


编辑:

gitlab/gitlab-ce:latest中的主包存储库不再包含旧的postgresql版本12。

添加官方postgresql repo以安装带有apt:的旧postgresql版本

sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt bionic-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update

之后,类似postgresql-10postgresql-11的包再次可用。

在它已经升级到13之后,我试图更改docker映像版本以遵循升级建议,这似乎打破了它。

对于任何看过@urzz的人,请回复关于使用postres:10容器恢复数据库的信息。有人已经做到了,这里有不错的备忘单

下次最好坚持的建议

您是否升级了gitlab版本?

我在将gitlab从12升级到13时遇到了同样的问题。

您可以尝试在gitlab中备份postgresql数据目录,就像复制它一样,并运行postgresql:10容器。使用数据目录,尝试读取postgresql的数据并将其转储。如果有效,请删除gitlab的数据目录,然后重新启动gitlab以初始化postgresql。然后从gitlabpostgresql中的转储文件中恢复数据。

这不是一项容易的任务。

首先,我用bash启动了GitLab容器,以调查发生了什么,在我的案例中使用了docker-compose run --rm gitlab /bin/bash。很高兴知道集装箱里的东西在哪里:

  • /assets/wrapper是容器的常用命令,它设置一切,运行迁移并启动GitLab
  • 日志文件可以在/var/log/gitlab中找到。容器日志没有包含任何关于postgres无法启动的原因的信息,但/var/log/gitlab/postgresql/current包含了
  • 捆绑的应用程序(例如postgres)可以在/opt/gitlab/embedded中找到。例如,要手动启动捆绑的Postgres服务器,请运行/opt/gitlab/embedded/bin/pgctl -D /var/opt/gitlab/postgresql/data start

运行cat /var/opt/gitlab/postgresql/data/PG_VERSION显示我的postgres数据目录在Postgres9.2上运行。在GitLab文档中有一个Postgres版本矩阵,其中显示了哪个GitLab版本捆绑了哪个Postgres的版本。一些GitLab版本捆绑了多个Postgres版本,这些版本支持在它们之间迁移。在我的案例中,GitLab 9是最后一个捆绑Postgres 9.2(以及Postgres 9.6)的版本。我在Docker Hub上发现GitLab 9的最新版本是9.5.10-ce.0,所以我更改了Docker compose配置以启动该版本。

我建议在继续之前删除所有/var/log/gitlab/gitlab-rails/gitlab-rails-db-migrate-*文件,因为这些文件似乎每次启动GitLab时都会打印出来,这会让人觉得发生了很多错误,尽管它们来自过去。

我不得不尝试几次启动GitLab 9,每次都调查并修复我在/var/log/gitlab中发现的问题。最终启动容器(或手动运行/assets/wrapper)自动将我的Postgres9.2数据库升级到9.6,我可以再次访问我的GitLab实例。

从那里开始,我继续推荐的升级路径,启动每个版本,并确保它可以在浏览器中访问。通常,一个版本在Mailroom超时时启动失败,但只需尝试第二次或第三次就可以解决问题。

GitLab 9.5.10将我的数据库从Postgres 9.2升级到9.6,GitLab 12.10.14将其升级到Postgres 11。从Postgres的版本矩阵来看,这意味着最后一个支持特定Postgres版本的GitLab版本确保自动将Postgres数据库升级到新版本。

现在我有最新的GitLab 13.8.0在Postgres 11上运行。在未来,我将确保遵循推荐的升级路径。

相关内容

最新更新