Большинство сбоев инстанса в контейнере проявляется при запуске, а причина видна в выводе контейнера или в логах на томе логов. В каждом разделе ниже приведены симптом, причина и порядок действий.
Веб-интерфейс отвечает 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 reconfigureGit по 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.