Ne pas tourner en root

Les conteneurs tournent en root sauf indication contraire. Avec USER dans le Dockerfile, une application compromise n'a que les droits d'un utilisateur ordinaire.

Comment ça marche

Beaucoup d'images fournissent un utilisateur : node dans les images node, nobody presque partout, nonroot dans distroless ; sinon crée-le avec adduser. Place USER après les étapes qui ont besoin de root, comme l'installation de paquets, et donne à l'utilisateur les dossiers où il écrit avec COPY --chown ou chown.

Ce qui casse

Passer à USER sans corriger les propriétaires donne « EACCES: permission denied » sur le dossier où l'application écrit. Un volume nommé prend le propriétaire du dossier de l'image la première fois qu'il est monté : crée donc ce dossier avec le bon propriétaire dans l'image.

Dans un Dockerfile

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
RUN mkdir -p /app/uploads && chown node:node /app/uploads
USER node
CMD ["node", "src/server.js"]

Regarde-le casser, puis répare-le

Écris le Dockerfile ou le fichier compose, tape les commandes docker, et regarde un serveur simulé les exécuter à travers redémarrages, mises à jour et trafic. Gratuit pour commencer.