gitlab-ce docker-“ PG :: ConnectionBad:无法连接到服务器:没有这样的文件或目录”

时间:2020-06-29 09:12:10

标签: git postgresql docker gitlab-ce

我已经使用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流程的一部分吗?通常,这只是docker pull,而且工作正常。

4 个答案:

答案 0 :(得分:1)

好像我已经通过尝试将docker映像版本升级到upgrade recomendations来打破它一样,将其升级到13。

对于任何使用@@ urzz reply来使用postres:10容器还原数据库的用户。已经有人做过了,并提供了不错的备忘单here

下次最好坚持使用recommendations

答案 1 :(得分:0)

您是否升级了gitlab版本?

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

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

答案 2 :(得分:0)

我认为我有几乎相同的问题。我将gitlab-ce docker容器从12.9.10升级到了13.1.2。

此后,出现了与您描述的相同的错误。由于gitlab在其docker容器中具有自己的(可能已修改?)postgresql,因此我尝试使用默认的prostresql安装将数据库从版本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容器。

希望如此?

答案 3 :(得分:0)

嗯,这不是一件容易的事。

首先,我用 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 数据目录在 Postgres 9.2 上运行。在 GitLab 文档中有一个 Postgres version matrix,它显示了哪个 GitLab 版本捆绑了哪个 Postgres 版本。一些 GitLab 版本捆绑了多个 Postgres 版本,这些版本支持在它们之间迁移。就我而言,GitLab 9 是最后一个捆绑 Postgres 9.2(以及 Postgres 9.6)的版本。我发现 on 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)自动将我的 Postgres 9.2 数据库升级到 9.6,我可以再次访问我的 GitLab 实例。

从那里我继续 recommended upgrade path 并启动每个版本并确保它可以在浏览器中访问。通常某个版本无法启动,因为 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 一起运行。将来我会确保遵循推荐的升级路径。

相关问题