Dockerfile Linter
Catch Dockerfile mistakes before they ship — pinned tags, COPY vs ADD, layer caches, root users and more.
Runs in your browser Hadolint-inspired rules Severity-tagged findings
Errors
1
Warnings
6
Info
5
L1DL3006Always tag the base image (avoid implicit :latest)
L2DL4000MAINTAINER is deprecated — use LABEL maintainer=… instead
L3DL3000WORKDIR should use absolute paths
L4DL3020Use COPY instead of ADD for files and directories
L5DL3016Prefer `npm ci` for reproducible installs in production images
L6DL3009apt-get update should be combined with apt-get install in the same RUN to avoid stale cache layers
L7DL3014Use the -y flag with apt-get install
L7DL3015Add --no-install-recommends to keep image small
L7DL3009Append `&& rm -rf /var/lib/apt/lists/*` after apt-get install to shrink the layer
L8DL3045Avoid `COPY . .` without WORKDIR or .dockerignore — bloats the image
L9DL3002Avoid running as root — switch to a non-root user
L11DL3025CMD should use the JSON array form for proper signal handling
Inspired by hadolint best practices. Linting runs entirely in your browser — your Dockerfile is never uploaded.
What it checks
Best-practice rules
Pinned base tags, deprecated MAINTAINER, sudo, apt-get layer-cache, ADD vs COPY, JSON-form CMD/ENTRYPOINT, non-root USER and more.
Errors, warnings, info
Each finding is tagged by severity with a hadolint-style rule code so you can cross-reference your CI pipelines.
Never uploaded
Linting runs locally. Your Dockerfile and any build secrets remain in your browser.
Frequently Asked Questions
Quick answers about the Dockerfile linter.
Need help containerizing or hardening your build pipeline? Talk to NETIUS →
