Назад | Перейти на главную страницу

Ошибка докера Gitlab при миграции базы данных после обновления (цикл перезапуска)

Я только что обновил свой экземпляр докера gitlab, запущенный с использованием docker-compose на хост-машине. У меня следующая ошибка:

Recipe: gitlab::database_migrations
  * bash[migrate gitlab-rails database] action run
    [execute] rake aborted!
              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"?
              /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in `block (3 levels) in <top (required)>'
              /opt/gitlab/embedded/bin/bundle:23:in `load'
              /opt/gitlab/embedded/bin/bundle:23:in `<main>'
              Tasks: TOP => gitlab:db:configure
              (See full trace by running task with --trace)
    
    ================================================================================
    Error executing action `run` on resource 'bash[migrate gitlab-rails database]'
    ================================================================================
    
    Mixlib::ShellOut::ShellCommandFailed
    ------------------------------------
    Expected process to exit with [0], but received '1'
    ---- Begin output of "bash"  "/tmp/chef-script20200707-23-1sorsih" ----
    STDOUT: rake aborted!
    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"?
    /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in `block (3 levels) in <top (required)>'
    /opt/gitlab/embedded/bin/bundle:23:in `load'
    /opt/gitlab/embedded/bin/bundle:23:in `<main>'
    Tasks: TOP => gitlab:db:configure
    (See full trace by running task with --trace)
    STDERR: 
    ---- End output of "bash"  "/tmp/chef-script20200707-23-1sorsih" ----
    Ran "bash"  "/tmp/chef-script20200707-23-1sorsih" returned 1
    
    Resource Declaration:
    ---------------------
    # In /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/database_migrations.rb
    
     55: bash "migrate gitlab-rails database" do
     56:   code <<-EOH
     57:     set -e
     58:     log_file="#{node['gitlab']['gitlab-rails']['log_directory']}/gitlab-rails-db-migrate-$(date +%Y-%m-%d-%H-%M-%S).log"
     59:     umask 077
     60:     /opt/gitlab/bin/gitlab-rake gitlab:db:configure 2>& 1 | tee ${log_file}
     61:     STATUS=${PIPESTATUS[0]}
     62:     chown #{account_helper.gitlab_user}:#{account_helper.gitlab_group} ${log_file}
     63:     echo $STATUS > #{db_migrate_status_file}
     64:     exit $STATUS
     65:   EOH
     66:   environment env_variables unless env_variables.empty?
     67:   notifies :run, "execute[clear the gitlab-rails cache]", :immediately
     68:   dependent_services.each do |svc|
     69:     notifies :restart, svc, :immediately
     70:   end
     71:   not_if "(test -f #{db_migrate_status_file}) && (cat #{db_migrate_status_file} | grep -Fx 0)"
     72:   only_if { node['gitlab']['gitlab-rails']['auto_migrate'] }
     73: end
    
    Compiled Resource:
    ------------------
    # Declared in /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/database_migrations.rb:55:in `from_file'
    
    bash("migrate gitlab-rails database") do
      action [:run]
      default_guard_interpreter :default
      command nil
      backup 5
      interpreter "bash"
      declared_type :bash
      cookbook_name "gitlab"
      recipe_name "database_migrations"
      code "    set -e\n    log_file=\"/var/log/gitlab/gitlab-rails/gitlab-rails-db-migrate-$(date +%Y-%m-%d-%H-%M-%S).log\"\n    umask 077\n    /opt/gitlab/bin/gitlab-rake gitlab:db:configure 2>& 1 | tee ${log_file}\n    STATUS=${PIPESTATUS[0]}\n    chown git:git ${log_file}\n    echo $STATUS > /var/opt/gitlab/gitlab-rails/upgrade-status/db-migrate-873248b1f0d3a7a5535771a3a1635803-8411f47246f\n    exit $STATUS\n"
      domain nil
      user nil
      not_if "(test -f /var/opt/gitlab/gitlab-rails/upgrade-status/db-migrate-873248b1f0d3a7a5535771a3a1635803-8411f47246f) && (cat /var/opt/gitlab/gitlab-rails/upgrade-status/db-migrate-873248b1f0d3a7a5535771a3a1635803-8411f47246f | grep -Fx 0)"
      only_if { #code block }
    end
    
    System Info:
    ------------
    chef_version=14.14.29
    platform=ubuntu
    platform_version=16.04
    ruby=ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux]
    program_name=/opt/gitlab/embedded/bin/chef-client
    executable=/opt/gitlab/embedded/bin/chef-client
    

Running handlers:
There was an error running gitlab-ctl reconfigure:

bash[migrate gitlab-rails database] (gitlab::database_migrations line 55) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20200707-23-1sorsih" ----
STDOUT: rake aborted!
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"?
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in `block (3 levels) in <top (required)>'
/opt/gitlab/embedded/bin/bundle:23:in `load'
/opt/gitlab/embedded/bin/bundle:23:in `<main>'
Tasks: TOP => gitlab:db:configure
(See full trace by running task with --trace)
STDERR: 
---- End output of "bash"  "/tmp/chef-script20200707-23-1sorsih" ----
Ran "bash"  "/tmp/chef-script20200707-23-1sorsih" returned 1

Running handlers complete
Chef Client failed. 9 resources updated in 18 seconds
Thank you for using GitLab Docker Image!
Current version: gitlab-ce=13.1.3-ce.0

Configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
And restart this container to reload settings.
To do it use docker exec:

  docker exec -it gitlab vim /etc/gitlab/gitlab.rb
  docker restart gitlab

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

If this container fails to start due to permission problems try to fix it by executing:

  docker exec -it gitlab update-permissions
  docker restart gitlab

Я видел этот вопрос, но ни один ответ не решил мою проблему.

Если нужна дополнительная информация, не стесняйтесь комментировать.

ОБНОВИТЬ:

После ответа @fuero я столкнулся с несколькими проблемами:

  1. У меня была ошибка tty при попытке запустить команду docker (возможно, не связанную, но я все равно нашел обходной путь). Сначала мне пришлось снять контейнер.

  2. / assets / wrapper разбил машину, поэтому я проигнорировал этот шаг, так как он работал нормально с использованием docker-compose up.

  3. Пакетов postgresql не было в репозиториях, поэтому мне пришлось добавить их вручную.

  4. При проверке у меня возникла ошибка разрешения, потому что я был в /. Переход на / tmp устранил проблему.

  5. Я все еще нахожусь в --check с другой ошибкой: Old cluster data and binary directories are from different major versions. Я пока не могу найти способ исправить это.

То же самое и здесь. Глядя на журнал Postgresql, он содержит:

The data directory was initialized by PostgreSQL version 10, which is not compatible with this version 11.7.

Похоже, версия докера не может правильно обновить свою базу данных.

На данный момент я вернулся к более старой версии (12.7) - 13.x кажется сломанным без ручного обновления БД. Вот как кто-то это сделал, включая содержимое в качестве цитаты для сохранения:

Обновите PostgreSQL с 10 до 11 в контейнере gitlab-ce 13.1.2

Использование 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

Если в разделе «Рецепт: gitlab :: database_migrations» произошел сбой и появилось хотя бы сообщение об ошибке Ошибка при выполнении действия «запустить» на ресурсе «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 не запущен, удалите файл сокета и повторите попытку.

После этого оставьте емкость.

После ответа @fuero получается рабочая установка, однако gitlab.rb необходимо обновить вручную, чтобы остановить миграцию базы данных, когда миграция не требуется.

В Old cluster data and binary directories are from different major versions ошибка при выполнении этих шагов была связана с тем, что база данных уже наполовину перенесена. Исправление заключается в использовании версии 11 как для старых, так и для новых двоичных файлов.