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