Verifique um Dockerfile com 55 regras do hadolint: versões fixadas, usuário root, cache e mais
Funciona no seu navegador. Nada do que você digita é enviado a lugar nenhum. Verificado em 16 de outubro de 2026.Um linter de Dockerfile lê o arquivo sem construí-lo e aponta as linhas arriscadas ou desperdiçadoras. Este aplica 55 das regras DL do hadolint, como DL3008 para pacotes do apt-get sem versão fixada e DL3002 para execução como root, e dá a cada achado sua linha, seu nível e sua correção. Ele roda no seu navegador, sem instalação e sem Docker.
Esta página foi traduzida automaticamente do original em inglês. Nenhuma pessoa revisou ainda a tradução; a versão em inglês é a que deve ser considerada. Ler o original em inglês
Cole o Dockerfile na caixa, abra o arquivo ou clique em Testar um exemplo.
Leia os achados, ordenados por linha: cada um tem um nível, seu código do hadolint, o que está errado e como corrigir.
Clique em um achado para ir até a linha dele, corrija e veja a lista se atualizar enquanto você digita.
Clique em Copiar relatório para levar os achados como texto, para um pull request ou um ticket.
Um Dockerfile pode construir hoje e quebrar no mês que vem: uma imagem base sem versão fixada muda, um apt-get install pega uma versão nova, um cache deixado em uma camada deixa a imagem centenas de megabytes maior. Um linter pega isso antes de ir para produção. O hadolint é o padrão em pipelines de CI; esta página aplica as regras de Dockerfile dele no seu navegador.
O que ele verifica. Cada achado indica sua linha, seu código do hadolint, um nível e uma correção em uma linha. As regras se dividem em cinco grupos:
| Grupo | Exemplos |
|---|---|
| Builds reproduzíveis | DL3006 imagem sem tag, DL3007 latest, DL3008 apt-get, DL3013 pip, DL3016 npm, DL3018 apk |
| Imagens menores | DL3009 listas do apt, DL3015 recommends, DL3019 cache do apk, DL3042 cache do pip, DL3059 camadas RUN extras |
| Segurança | DL3002 usuário root, DL3004 sudo, DL4006 pipefail |
| Correção | DL3011 faixa de portas, DL3021 destino do COPY, DL3022 e DL3023 nomes de estágio, DL3044 ENV, DL3061 ordem |
| Intenção clara | DL3000 WORKDIR, DL3003 cd, DL3020 ADD, DL3025 CMD em JSON, DL4000 MAINTAINER |
Quão perto do hadolint ele fica. As regras foram escritas a partir do código-fonte do hadolint 2.12, e os testes usam as respostas do programa hadolint real para mais de 80 Dockerfiles: os mesmos códigos nas mesmas linhas, sempre. Builds multiestágio, ONBUILD, linhas de continuação, a diretiva escape e comentários # hadolint ignore= em linha se comportam como no hadolint. Os avisos SC do ShellCheck sobre o código de shell dentro das linhas RUN não estão incluídos.
Desligar uma regra. Coloque # hadolint ignore=DL3008 na linha antes de uma instrução para pular essa regra ali, ou # hadolint global ignore=DL3059 em qualquer lugar para pulá-la no arquivo inteiro. O resumo informa quantos achados foram desligados.
Tudo roda no seu navegador: o Dockerfile que você cola ou abre nunca é enviado.
DL3008 diz que uma linha apt-get install cita pacotes sem versão, então cada build pode instalar algo diferente. Escreva pacote=versão, como curl=7.88.1-10+deb12u5, e descubra a versão atual com apt-cache policy curl dentro da imagem base. Fixar versões torna a imagem reproduzível; atualize as versões de propósito, não por acidente.
Um contêiner que roda como root tem direitos de root dentro dele, então um invasor que entre na aplicação pode fazer mais, e um erro em um volume montado pode alterar arquivos do host. Crie um usuário em um RUN, como useradd app, e termine o estágio com USER app. As etapas de build anteriores ainda podem rodar como root.
Cada RUN cria uma camada, e um arquivo removido em uma camada posterior ainda ocupa espaço na anterior. O apt-get update baixa listas de pacotes de dezenas de megabytes, então remova-as no mesmo RUN com && rm -rf /var/lib/apt/lists/*. Removê-las em um RUN separado não economiza nada.
Escreva um comentário logo acima da instrução: # hadolint ignore=DL3008, ou vários códigos separados por vírgulas. Para desligar uma regra no arquivo inteiro, escreva # hadolint global ignore=DL3059 em qualquer lugar. Os dois funcionam no próprio hadolint e nesta página, e o resumo conta o que foi desligado.
Para as regras de Dockerfile, sim: os 55 códigos DL, seus níveis e suas condições seguem o hadolint 2.12, e os testes comparam com o programa hadolint real em mais de 80 arquivos. Não estão incluídos os avisos SC do ShellCheck sobre o código de shell dentro das linhas RUN, nem as regras que precisam de um arquivo de configuração, como registries permitidos.
Use COPY para arquivos e pastas. O ADD também baixa URLs e descompacta arquivos tar locais, o que é útil quando você quer exatamente isso e surpreendente quando não quer. O hadolint aponta ADD para um arquivo simples como DL3020, e um COPY seguido de tar -x do mesmo arquivo como DL3010, em que o ADD faria isso em um passo.
Taxas e regras mudam; confira a fonte antes de confiar em um valor.
Ainda com dúvidas? Pergunte sobre Linter de Dockerfile e qualquer pessoa que saiba pode responder. Não é preciso ter conta.