Dockerfile Linter

Check your Dockerfile for best-practice violations.

freeworks offlinenothing uploaded
Input
Output

About dockerfile linter

Dockerfile Linter is a small tool that does one job while you watch. Nothing is saved, so a reload gives you a clean start.

The tool is a few kilobytes of JavaScript, not a service. That is why it can promise your data stays put and actually mean it.

You will find it under Containers & deploys, alongside 7 other tools for the same sort of job.

Detects :latest tags, sudo usage, ADD vs COPY, relative WORKDIR, apt-get cache issues, and consecutive RUN layers.

How to use it

01
Start it
Every control is on the tool itself. Keyboard shortcuts, where there are any, are listed beside it.
02
Watch it run
It updates in the page as you go. Nothing is sent anywhere, so it keeps working with the network off.
03
Close when done
Nothing is stored between visits. Reloading gives you a clean start rather than picking up where you left off.

Examples

Catch common Dockerfile anti-patterns
Detect :latest tag, sudo, missing --no-install-recommends, ADD misuse, and relative WORKDIR
Input
FROM node:latest
RUN sudo apt-get update
RUN apt-get install -y curl
ADD . /app
WORKDIR app
Output
# Dockerfile Lint Results

Errors: 0 | Warnings: 6 | Info: 1

[WARNING] Line 1 (DL3007): Avoid using 'latest' tag; pin to a specific version
[WARNING] Line 2 (DL3009): Combine apt-get update with install in a single RUN to avoid cache issues
[WARNING] Line 2 (DL3004): Avoid using sudo in Dockerfiles; use USER instead
[WARNING] Line 3 (DL3015): Use --no-install-recommends with apt-get install
[INFO] Line 3 (DL3059): Consider combining consecutive RUN commands with &&
[WARNING] Line 4 (DL3020): Use COPY instead of ADD for simple file copying
[WARNING] Line 5 (DL3006): WORKDIR should use absolute paths

Questions

Does Dockerfile Linter work offline?+

Yes. It is JavaScript running in this tab, so once the page has loaded it needs nothing further from the network. Put the machine in flight mode and it carries on. Nothing you do here is sent anywhere, because there is nowhere for it to go.

Does it remember anything between visits?+

No. Reload the page and it starts from nothing. There is no account, no saved state and no cookie holding your last session. That is a deliberate trade: it cannot lose your data because it never keeps any.

Is it accurate?+

Timing comes from performance.now(), the high resolution clock the browser provides, rather than from setInterval, which drifts by a few milliseconds every tick and compounds over minutes. What can still shift things is the browser throttling a tab in the background, so leave it visible if the timing matters.

Does it make a sound?+

Where a sound makes sense, it is generated with the Web Audio API rather than loaded as a file, so there is nothing to download and nothing to block. Browsers refuse to start audio until you have interacted with the page, which is why the first press is what switches it on.

Can I use Dockerfile Linter on a phone?+

Yes. The controls are sized for touch and the layout collapses to one column on a narrow screen. Bear in mind that a phone locking its screen will suspend the page, and timing stops with it.