Dockerfile USER: запись файла с ограниченными правами

Практическая задача Docker: Пользователь контейнера и права на файлы. Условие описывает предоставленные файлы, доступный базовый образ и требования к сборке или запуску. Изменяйте только разрешённые файлы. Проверьте пути, рабочую директорию, пользователя и различие настроек сборки и запуска. Задача помогает закрепить поведение Dockerfile на конкретном проекте; объяснения и дальнейшая практика находятся в полном курсе Docker для разработчика.

Запись с ограниченными правами

Выданный write.sh записывает строку в /data/record.txt, затем читает этот файл. Подготовьте образ, в котором скрипт выполнится от непривилегированного пользователя. Менять можно только Dockerfile; содержимое write.sh сохраните.

Контекст сборки — корень выданного рабочего пространства. Используйте busybox:1.36, скопируйте write.sh в /opt/write.sh и задайте CMD для его запуска через sh. Устанавливать пакеты и обращаться к сети не нужно.

Требования:

  • пользователь процесса по умолчанию — 10001:10001;
  • каталог /data существует, его числовой владелец и группа — 10001:10001;
  • права каталога — 750, то есть rwxr-x---: владельцу чтение, запись и проход, группе чтение и проход, остальным доступа нет;
  • команда sh /opt/write.sh создаёт файл и печатает record=ready, завершившись с кодом 0.

Числовую маску подбирать не требуется: для этого заданного режима используйте готовую команду chmod 750 /data внутри RUN. Самостоятельно согласуйте создание каталога, его владельца и пользователя процесса. Возврат к root или chmod 777 не удовлетворяет условиям.

Проверочная команда сверяет UID/GID процесса, числового владельца и группу /data, права 750 и выполнение выданного скрипта. Метаданные USER и CMD проверяются отдельно. Запуск с переопределённой контрольной командой не доказывает точное поведение произвольного CMD: дополнительно проверьте свой стандартный запуск без аргументов, ожидая тот же текст и код 0.

Это отдельная задача на файловые права в образе. Права внешнего bind mount или named volume из них автоматически не следуют; соответствующий опыт с HTTP-сервисом выполняется в локальной лабораторной.

РешениеDockerfile

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи