Node.js › Docker & Deployment
Why should a Node.js Docker container generally run as a non-root user, and how do you configure this in a Dockerfile?
AdvancedAnswer
Running a container's process as root means that if an attacker manages to exploit a vulnerability in the application, they gain root-level access within the container, which combined with certain container escape vulnerabilities could pose additional risk to the host -- running as a dedicated, unprivileged user significantly limits the potential blast radius of a successful application-level compromise, following the principle of least privilege at the container level.
FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --chown=appuser:appgroup . .
USER appuser
CMD ["node", "server.js"]Real-world example A security audit flags that a company's production containers were all running as root by default; adding a dedicated non-root user to the Dockerfile and switching to it via the USER instruction closes that gap without requiring any change to the application code itself.