Настройка GitLab на Docker для Windows с томами, общими с сервером Linux

Вопрос или проблема

У меня есть экземпляр GitLab в контейнере Docker, работающий на NAS Synology. Теперь я хочу перенести GitLab на компьютер с Windows, который у меня есть, но сохранить данные на NAS, делая папки совместно используемыми и создавая из них тома Docker. Чтобы протестировать это, я создал несколько папок config, data и logs на NAS и поделился ими в сети с помощью “Общей папки”. Насколько я понимаю, для этого у нас настроен Samba. Затем на машине с Windows я выполняю (основываясь на этой рекомендации)

docker volume create --driver local
  --opt type=cifs
  --opt device=//192.168.1.150/gitlab_docker_volume/config
  --opt o=user=gitlab_docker_volume,password=<password> gitlab-config

и еще два для создания gitlab-data и gitlab-logs.

Затем я запускаю контейнер с помощью команды

docker run -d -p 8070:80 -p 8433:443 -p 8012:22
  -v gitlab-logs:/var/log/gitlab:rw
  -v gitlab-data:/var/opt/gitlab:rw
  -v gitlab-config:/etc/gitlab:rw gitlab/gitlab-ce

и он выдает ошибку

...
Mixlib::ShellOut::ShellCommandFailed:
Не удалось подтвердить, что владельцем "/var/opt/gitlab/git-data" был git:git
...

2024-12-13 13:54:47 + [ root:root = git:git ]

Когда я смотрю в папки на NAS, я вижу, что контейнер успешно создал все файлы и папки, необходимые GitLab, но у них у всех владелец gitlab_docker_volume:users и права 777. В томе data из оригинального контейнера GitLab, который работает на NAS, папка git-data принадлежит какому-то загадочному пользователю 998, и у нее права 2770.

Если я все правильно понимаю, проблема в том, что контейнер GitLab пытается изменить владельца папки git-data, и ничего не происходит, потому что Windows не понимает Linux-права – по сути, контейнер Docker записывает файлы Windows, а Windows затем переводит это в изменения на Linux-файлах NAS, игнорируя операции, которые он не понимает.

Существует два сообщения об одной и той же ошибке, но они столкнулись с ней, используя разные настройки для своих томов – у одного из них, похоже, возникла проблема из-за запуска сервера Windows в виртуальной машине, другой использовал родные папки Windows.

https://stackoverflow.com/questions/45134978/setting-up-gitlab-using-docker-on-windows-host-issue-with-shared-folders

https://stackoverflow.com/questions/44684621/volume-trouble-with-gitlab-docker-image-on-windows

Я также пытался выяснить, как редактировать права Linux через сетевую папку в общем, но нашел только результаты по теме “как установить права при создании папок, чтобы контейнер Docker мог редактировать их изначально”, что уже работало.

С другой стороны, у меня есть общие папки, которые изначально находятся на Linux-машине. Есть ли способ изменить настройку общего доступа к папкам, настройку томов или что-то еще, чтобы контейнер мог изменять пользователя и права файлов? Docker работает с бэкендом WSL, кстати.

Ответ или решение

Настройка GitLab на Docker для Windows с совместными томами из Linux-сервера

При переносе вашего экземпляра GitLab из Docker-контейнера на NAS Synology на ПК с Windows, при этом сохраняя данные на NAS, важно учесть несколько ключевых аспектов. Ваша задача состоит в корректной настройке совместных томов, чтобы избежать проблем с правами доступа и совместимостью между Windows и Linux.

1. Установка необходимых компонентов

Убедитесь, что на вашем ПК с Windows установлены все необходимые компоненты:

  • Docker Desktop с поддержкой WSL 2.
  • Доступ к вашей NAS по сети.

2. Настройка общих папок на NAS

Сначала позаботьтесь о том, чтобы на NAS были созданы необходимые папки: config, data, и logs. Убедитесь, что они правильно настроены для общего доступа по сети через Samba. Для более высокой совместимости используйте следующие параметры прав доступа:

  • Установите права на папки, позволяющие пользователю git (или gitlab) записывать данные.
  • Рекомендуется дать права в виде 2770 через SSH или веб-интерфейс вашего NAS (это позволит GitLab корректно записывать данные).

3. Создание Docker-томов на Windows

Следующим шагом создадим Docker-тома, используя cifs (Common Internet Filing System) в качестве драйвера.

docker volume create --driver local \
  --opt type=cifs \
  --opt device=//192.168.1.150/gitlab_docker_volume/config \
  --opt o=username=<user>,password=<password> gitlab-config

docker volume create --driver local \
  --opt type=cifs \
  --opt device=//192.168.1.150/gitlab_docker_volume/data \
  --opt o=username=<user>,password=<password> gitlab-data

docker volume create --driver local \
  --opt type=cifs \
  --opt device=//192.168.1.150/gitlab_docker_volume/logs \
  --opt o=username=<user>,password=<password> gitlab-logs

Примечание: Замените <user> и <password> на ваши учетные данные NAS. Убедитесь, что учетная запись имеет необходимые права для доступа к папкам.

4. Запуск контейнера GitLab

После создания томов вы можете запустить контейнер GitLab. Следующий пример демонстрирует команду для запуска с назначением созданных томов:

docker run -d -p 8070:80 -p 8433:443 -p 8012:22 \
  -v gitlab-config:/etc/gitlab:rw \
  -v gitlab-data:/var/opt/gitlab:rw \
  -v gitlab-logs:/var/log/gitlab:rw \
  gitlab/gitlab-ce

5. Решение проблем с правами доступа

Ошибка, которую вы наблюдаете, связана с тем, что GitLab ожидает, что папки будут иметь пользователя и группу git:git. Однако, когда вы работаете с общими ресурсами через Windows, эта информация о владельце не сохраняется корректно. Чтобы минимизировать такие проблемы:

  • Проверьте, установлен ли у вас правильный режим совместимости CIFS, чтобы Linux-контейнер мог обрабатывать права доступа. Попробуйте добавить опцию file_mode и dir_mode в команду создания тома:
--opt o=username=<user>,password=<password>,file_mode=0770,dir_mode=0770

Этот подход может помочь в настройке более точных прав доступа, однако это не всегда работает под всеми конфигурациями.

6. Альтернативные стратегии

Если описанные выше шаги не помогают, вы можете рассмотреть следующие альтернативные решения:

  • Запустите Docker-контейнер GitLab непосредственно на NAS, если это возможно. Это устранит необходимость в совместимости между Windows и Linux.
  • Используйте виртуальную машину с Linux на Windows (например, через VirtualBox или WSL), чтобы обеспечить более нативную поддержку Linux-приложений и разрешений.

Заключение

Результативная настройка GitLab на Docker с использованием совместимых томов требует внимательного подхода к правам доступа и совместимости систем. Следуя приведённым шагам, вы сможете устранить ошибки и обеспечить эффективную работу вашего экземпляра GitLab. В случае возникновения сложностей всегда полезно обращаться к официальной документации GitLab и Docker для уточнения деталей.

Оцените материал
Добавить комментарий

Капча загружается...