Пользователь приложения в Docker
Пользователь приложения запускает
процесс не от администратора
образа.
В node:24 уже есть
учётная запись node,
и после копирования файлов
именно она стартует сервер.
Строка COPY --chown=node:node
отдаёт файлы владельцу
node, затем директива
USER node задаёт
пользователя для CMD.
Скрипт по-прежнему отдаёт
hello на порту 3000:
const http = require('node:http');
const server = http.createServer((req, res) => {
res.end('hello');
});
server.listen(3000, '0.0.0.0');
В package.json список
dependencies пуст:
{
"name": "app",
"scripts": {
"start": "node server.js"
},
"dependencies": {}
}
Файл Dockerfile с
владельцем и пользователем:
FROM node:24
WORKDIR /app
COPY --chown=node:node package.json .
RUN npm install --omit=dev
COPY --chown=node:node server.js .
USER node
CMD ["node", "server.js"]
Сервис собирается из точки
и публикует порт.
Файл compose.yaml:
services:
app:
build: .
ports:
- "3000:3000"
Разовый запуск с командой
whoami печатает имя
node, если образ
собран с USER node.
Сначала поднимем сервис,
затем проверим имя:
docker compose up -d --build
docker compose run --rm app whoami
Опишите сервис safe, где файлы копируют с владельцем node и процесс стартует не от root.
Запустите разовую команду, которая печатает имя текущего пользователя, и сверьте вывод с node.