Вступление
Docker и Docker Compose потрясающие. Буквально вчера мне пришлось установить программное обеспечение для создания пользовательского интерфейса поверх API программного обеспечения. Мне потребовалось всего минуты, чтобы загрузить DockerFile, добавить некоторую конфигурацию, используя Docker Compose, создать изображение и запустить контейнер. Я очень счастлив, что Docker и Docker Compose существуют, но я хотел бы увидеть некоторые Улучшения на macOS Анкет
Концепция пользователей, групп и разрешений на файлы тоже потрясающая. Если вы новичок в этом, я бы порекомендовал Эта статья , это охватывает все основы.
Эта проблема
Прошлый год Я переключился с macOS на Linux Из -за некоторых проблем с производительностью. Переключатель определенно улучшил скорость и стабильность объемов Docker, но я продолжал столкнуться с проблемой, которая не возникала на MacOS: разбитые разрешения на файл.
При использовании Docker на MacOS разрешения файла не синхронизируются между вашим локальным компьютером и контейнерами Docker. На Linux файловые разрешения становятся синхронизированными, что, по моему мнению, на самом деле так, как это должно быть для всех операционных систем.
Это была огромная проблема.
Если я меняю файлы локально, разрешения файла будут изменены внутри контейнера с пользователем и группой, которых даже не существовало внутри контейнера.
Если бы я изменил файлы внутри контейнера, используя единственного существующего пользователя root, разрешения файла также будут изменены на моей локальной машине на Корень: корень
Анкет
В то время конфигурация выглядела примерно как следующее:
Нажмите, чтобы открыть Dockerfile Введите полноэкранный режим Выйдите из полноэкранного режима
Нажмите, чтобы открыть docker-compose.yml Введите полноэкранный режим Выйдите из полноэкранного режима
Мы использовали такие команды, как это:
docker-compose exec application bash
Решение
Создайте пользователя и группу внутри контейнера Docker с теми же идентификаторами, которые вы используете локально. Когда это сделано, разрешения файла могут быть синхронизированы, потому что используется тот же пользователь и группа.
Сначала вам нужно экспортировать свой пользователь и идентификатор группы в конфигурации оболочки (например, G. ~/.zshrc
или ~/.bashrc
):
# Export variables for Docker and Docker Compose export USER_ID=$(id -u) export GROUP_ID=$(id -g)
Теперь наша конфигурация выглядит примерно так:
Нажмите, чтобы открыть Dockerfile Введите полноэкранный режим Выйдите из полноэкранного режима
Нажмите, чтобы открыть docker-compose.yml Введите полноэкранный режим Выйдите из полноэкранного режима
Отныне вы должны выполнять команды внутри контейнера, используя недавно сгенерированный пользователь. Теперь мы запускаем такие команды:
docker-compose exec --user alice application bash
дальнейшее чтение
Если вы хотите узнать больше о нашей местной среде разработки, используя Docker и Docker Compose, посмотрите на статью, которую моя коллега написал некоторое время назад.
Оригинал: «https://dev.to/visuellverstehen/docker-docker-compose-and-permissions-2fih»