Смените пользователя запуска и сохраните работоспособность приложения.
Права и данные~18 минНастоящая лабораторная
После урока вы сможете
Запускать сервер с UID 65532
Сохранять доступ к исходникам без лишних прав
Проверять функцию после изменения окружения
Изменение ограничений — повод для регрессии
На стенде хотят запускать сервис без root. Исходный образ возвращает правильный JSON, поэтому переписывать обработчик не требуется. Ваша задача — изменить пользователя запуска, затем доказать, что прежний HTTP-контракт сохранился.
Используйте USER 65532:65532. Проверка запустит образ и исследует фактический UID, а также сделает HTTP-запрос. Одной строки-комментария «non-root» или переменной окружения с таким названием недостаточно.
USER 65532:65532
Сохраняем минимальную модель доступа
Сервер должен читать исходник и слушать порт 8000. Он не сохраняет файлы, не открывает домашнюю папку пользователя и не устанавливает пакеты. Поэтому не нужны ни новый пользователь с домашним каталогом, ни chmod 777, ни скачивание утилит.
Расположите USER после подготовки рабочей папки и копирования кода. Оставьте команду запуска в exec-форме. Если меняете приложение для эксперимента, не добавляйте запись в /app: это создаст новое требование, которого в задаче нет.
Успех состоит из двух утверждений: процесс выполняется с нужным ненулевым UID и сервер продолжает отдавать ожидаемый ответ. Если первое зелёное, а второе нет, изменение прав ещё не готово к использованию.
При ошибке запуска прочитайте журнал до изменения Dockerfile. Отсутствующий файл, запрет чтения и неправильный адрес прослушивания требуют разных исправлений. После успеха объясните, почему принадлежность исходника root не мешает его чтению другим пользователем.
{"message": "Hello, Docker!"}
Запустите приложение от обычного пользователя
Измените Dockerfile так, чтобы сервер запускался с USER 65532:65532. Сохраните HTTP-ответ Hello, Docker! и прослушивание 0.0.0.0:8000. Приложению не нужна запись в файловую систему.