Docker-compose не удается корректно смонтировать папки Ubuntu.

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

Я пытаюсь восстановить свою конфигурацию Docker на новой виртуальной машине Ubuntu и сталкиваюсь с проблемами при подключении папок, которые раньше работали нормально. В приведенных ниже примерах у меня есть /data/satisfactory/config как папка на хосте, которая подключена к /config в контейнере. Однако файлы, которые существуют в папке на хосте, не отображаются в виртуальной машине.

docker-compose.yml

version: '3'
services:
  satisfactory-server:
    container_name: 'satisfactory'
    hostname: 'satisfactory-server'
    image: 'wolveix/satisfactory-server:latest'
    ports:
        - '7777:7777/tcp'
        - '7777:7777/udp'
    volumes:
        - '/data/satisfactory/config:/config'
    environment:
        - TZ=America/Los_Angeles
        - MAXPLAYERS=6
        - PGID=1000
        - PUID=1000
        - ROOTLESS=false
        - STEAMBETA=false
    restart: unless-stopped

Список файлов на хосте и в контейнере:

❯ ls -ltr /data/satisfactory/config
total 20
drwxrwxrwx 3 jon jon 4096 Oct 27 20:22 logs
drwxrwxrwx 2 jon jon 4096 Oct 27 20:22 backups
drwxrwxrwx 6 jon jon 4096 Oct 27 20:22 gamefiles
drwxrwxrwx 2 jon jon 4096 Oct 27 20:23 overrides
drwxrwxrwx 4 jon jon 4096 Oct 27 20:23 saved


# Содержимое папки сохраненных файлов на хосте:

❯ ls -ltr /data/satisfactory/config/saved/server
total 52808
-rwxrwxrwx 1 jon jon 7495071 Oct 27 20:25 game-save_autosave_1.sav
-rwxrwxrwx 1 jon jon 7499844 Oct 27 20:25 game-save_autosave_2.sav
-rwxrwxrwx 1 jon jon 7498095 Oct 27 20:25 game-save_autosave_3.sav
-rwxrwxrwx 1 jon jon 7505447 Oct 27 20:25 game-save_autosave_4.sav

# Содержимое папки изнутри контейнера:

❯ docker exec -it satisfactory sh
# ls -ltr /config/saved/server
total 0
#

Проблема существует для трех других контейнеров с папками конфигураций в той же папке /data, которые я здесь сократил. Однако, если я перемещаю папки на смонтированный сетевой диск, все работает должным образом.

Обновленная строка в docker-compose.yml:

volumes:
    - '/mnt/vault/data/satisfactory-relaxed/config:/config' #NFS смонтированная папка

Файлы на NFS монтировании (имя папки satisfactory-relaxed вместо satisfactory):

❯ ls -ltr /mnt/vault/data/satisfactory-relaxed/config
total 0
drwxrwxr-x 1 jon jon    0 Nov  8  2023 overrides
drwxrwxr-x 1 jon jon   52 Oct 28 06:41 logs
drwxrwxr-x 1 jon jon 1012 Oct 28 06:41 backups
drwxrwxr-x 1 jon jon  350 Oct 28 06:41 gamefiles
drwxrwxrwx 1 jon jon  118 Oct 28 06:42 saved

❯ ls -ltr /mnt/vault/data/satisfactory-relaxed/config/saved/server
total 52660
-rw-r--r-- 1 jon jon 7468573 Oct 28 16:25 game-save_autosave_4.sav
-rw-r--r-- 1 jon jon 7462665 Oct 28 16:35 game-save_autosave_1.sav
-rw-r--r-- 1 jon jon 7470903 Oct 28 16:40 game-save_autosave_2.sav
-rw-r--r-- 1 jon jon 7479219 Oct 28 16:45 game-save_autosave_3.sav

❯ docker exec -it satisfactory-relaxed sh
# ls -ltr /config/saved/server
total 52672
-rw-r--r-- 1 steam steam 7462665 Oct 28 09:35 game-save_autosave_1.sav
-rw-r--r-- 1 steam steam 7470903 Oct 28 09:40 game-save_autosave_2.sav
-rw-r--r-- 1 steam steam 7479219 Oct 28 09:45 game-save_autosave_3.sav
-rw-r--r-- 1 steam steam 7479562 Oct 28 09:50 game-save_autosave_4.sav

Явно проблема связана с правами доступа, но я не могу её понять. В docker logs satisfactory нет очевидных ошибок, и, как видно выше, я установил права chmod на папки на 777 в попытке отладить, но это не помогло. Буду признателен за любые предложения!

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

Проблема, с которой вы столкнулись, связана с некорректным монтированием папок на рабочем окружении Docker, что часто происходит из-за конфликтов прав доступа. Рассмотрим различные аспекты этой проблемы и предложим решения.

1. Проверка прав доступа

Ваша проблема может быть связана с тем, что Docker контейнер запускается от имени пользователя, у которого нет прав на необходимые директории хоста. В Ubuntu права доступа могут работать иначе, особенно если используется rootless (без привилегий суперпользователя). Следует убедиться, что пользователь, под которым работает ваш контейнер, совпадает с пользователем на хосте или имеет соответствующие права.

Для корректного взаимодействия с файлами на хосте в контейнер, выполните следующие шаги:

  • Определите UID и GID текущего пользователя на хосте командой:
id
  • Убедитесь, что в вашем файле docker-compose.yml заданы корректные переменные окружения PUID и PGID. Например, если ваш UID и GID равны 1000:
environment:
  - PUID=1000
  - PGID=1000

2. Проверка конфигурации Docker и SELinux

Если вы используете Docker, убедитесь, что ваш daemon настроен корректно:

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

3. Обновление версии Docker

Убедитесь, что версия вашего Docker актуальна. Иногда устаревшие версии могут иметь проблемы с монтированием томов. Обновите Docker до последней стабильной версии, чтобы исключить возможность возникновения ошибок из-за багов.

4. Монтирование через NFS

Как вы заметили, перемещение файлов на NFS-драйв решает проблему. Это связано с тем, что NFS предоставляет возможность переопределять и управлять правами доступа более удобно в зависимости от настроек сервера NFS.

Для проверки конфигурации NFS:

  • Рассмотрите возможность настройки постоянных UID/GID для пользователей на клиенте, чтобы обеспечить согласование прав доступа между хостом и контейнером.
  • Используйте опции nolock или sync на клиенте, если это необходимо.

5. Логи и отладка

Если указанные действия не помогли, посмотрите логи Docker. Команда docker logs satisfactory может предоставить вам дополнительные указания. Также полезно запустить контейнер в интерактивном режиме, чтобы детально исследовать:

docker run -it --rm -v /data/satisfactory/config:/config wolveix/satisfactory-server:latest sh

Это позволит вам проверить, какие папки доступны и какие права у вас есть.

Заключение

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

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

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

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