Большинство сбоев инстанса в контейнере проявляется при запуске, а причина видна в выводе контейнера или в логах на томе логов. В каждом разделе ниже приведены симптом, причина и порядок действий.

Веб-интерфейс отвечает 502 после запуска

Причина. при каждом запуске выполняется gitlab-ctl reconfigure, и приложение принимает запросы только после него. Первый запуск занимает несколько минут, последующие — одну-две минуты.

Решение. следите за запуском по выводу контейнера и дождитесь окончания настройки:

docker logs -f code
docker exec code gitlab-ctl status

Если 502 держится дольше, приложение не запускается: прочитайте его лог и проверьте свободную память на хосте.

docker exec code gitlab-ctl tail puma

Состояние контейнера остаётся unhealthy

Причина. проверка состояния выполняется каждые 60 секунд и после пяти неуспешных проверок подряд переводит контейнер в состояние unhealthy; первый запуск доходит до этого состояния, пока настройка ещё выполняется. Если состояние unhealthy сохраняется и после неё, сервисы не запустились.

Решение. выполните ту же проверку вручную и посмотрите состояние сервисов и лог настройки:

docker exec code gitlab-healthcheck --fail --max-time 10
docker exec code gitlab-ctl status
docker exec code ls /var/log/gitlab/reconfigure

Сервисы не запускаются после копирования или восстановления томов

Причина. владелец и права файлов на томах не соответствуют учётным записям внутри образа, которые созданы с фиксированными идентификаторами.

Решение. восстановите права командой из образа и перезапустите контейнер:

docker exec -it code update-permissions
docker restart code

Обновление базы данных завершилось с ошибкой, контейнер остановился

Где проявляется. в выводе контейнера есть строка Upgrading the existing database failed and was reverted.

Причина. при запуске выполняется gitlab-ctl pg-upgrade, обновление завершилось с ошибкой, и база данных возвращена к предыдущей версии.

Решение. создайте контейнер заново, добавив -e GITLAB_SKIP_PG_UPGRADE=true к команде из раздела «Быстрый старт». Инстанс запустится на текущей версии PostgreSQL, а обновление базы данных выполняется по разделу «Обновление».

Инстанс не отвечает по HTTPS

Причина. образ объявляет порт 443, но порт доступен только тогда, когда контейнер его публикует, а порты задаются при создании контейнера.

Решение. удалите контейнер и создайте его заново командой из раздела «Быстрый старт» с параметром -p 443:443 и теми же томами; данные остаются на томах:

docker stop code
docker rm code

В ссылках и URL для клонирования указан идентификатор контейнера

Причина. адрес инстанса не задан, и образ строит его из имени хоста контейнера, которое Docker задаёт равным идентификатору контейнера.

Решение. задайте external_url в /etc/gitlab/gitlab.rb и перезапустите контейнер либо создайте контейнер заново с адресом в GITLAB_OMNIBUS_CONFIG, как описано в разделе «Быстрый старт».

Контейнер останавливается на проверке версии

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

Причина. при запуске версия на томе данных сравнивается с версией образа, и запуск прекращается, если перейти к ней за один шаг нельзя.

Решение. запустите сначала тег промежуточной версии, затем целевой, как описано в разделе «Обновление».

Изменение конфигурации не действует

Где проявляется. в выводе контейнера есть строка Skipped reconfigure because GITLAB_SKIP_RECONFIGURE is set.

Причина. переменной GITLAB_SKIP_RECONFIGURE задано значение true, и запуск оставляет конфигурацию прежней. Тот же симптом без этой строки означает, что настройка задана в GITLAB_OMNIBUS_CONFIG и переопределена файлом /etc/gitlab/gitlab.rb.

Решение. выполните настройку вручную либо создайте контейнер без этой переменной:

docker exec code gitlab-ctl reconfigure

Git по SSH отклоняет подключение

Причина. порт 22 контейнера не опубликован, либо переменной GITLAB_DISABLE_OPENSSH задано значение true и сервис sshd не подготовлен, либо клиент подключается к порту хоста, который не указан в URL для клонирования.

Решение. проверьте опубликованные порты и переменные контейнера, затем задайте порт SSH, как описано в разделе «Настройка после установки»:

docker port code
docker inspect --format '{{.Config.Env}}' code

Если клиент сообщает о смене ключа хоста после перезапуска, контейнер работает с новым томом конфигурации: ключи хоста сгенерированы заново.

Общая диагностика

Эти команды показывают состояние работающего контейнера:

docker logs -f code
docker exec code gitlab-ctl status
docker exec code gitlab-ctl tail <SERVICE>
docker exec code gitlab-rake gitlab:check SANITIZE=true
docker inspect --format '{{.State.Health.Status}}' code

Логи всех сервисов лежат на томе логов, на хосте это /srv/code/logs, а лог каждого запуска настройки — в /var/log/gitlab/reconfigure.

Дополнительные ресурсы