dockerfmt - Formateador de Dockerfile
(github.com/reteps)- Una alternativa modernizada al
dockfmtoriginal, que organiza automáticamente los Dockerfile y unifica el estilo del código - Internamente usa
buildkitpara analizar la sintaxis de Dockerfile ymvdan/shpara formatear scripts de shell dentro de comandosRUN - Ayuda a mantener un estilo de código consistente y puede ser útil en revisiones de código y entornos de CI
Uso
dockerfmt [Dockerfile] [flags]
dockerfmt [command]
- Comandos principales:
- completion: genera scripts de autocompletado para el shell
- help: ayuda de comandos
- version: muestra la versión
- Flags principales:
- -c, --check: solo verifica si necesita formateo
- -i, --indent: configura la cantidad de espacios de indentación (predeterminado: 4)
- -n, --newline: agrega un salto de línea al final del archivo
- -s, --space-redirects: agrega un espacio después de los operadores de redirección
- -w, --write: sobrescribe el archivo original con los cambios
Configuración de hook de pre-commit
- Se puede integrar como hook de pre-commit
- Ejemplo de archivo
.pre-commit-config.yaml:repos: - repo: https://github.com/reteps/dockerfmt rev: main hooks: - id: dockerfmt args: - --indent=4
Limitaciones actuales
- En los comandos RUN todavía no se admiten el punto y coma (
;) ni la agrupación de comandos - No hay función de salto de línea automático para comandos JSON largos
- La directiva
# escape=Xno es compatible
Presentación de funciones
-
Usa mvdan/sh al formatear comandos RUN
-
Soporte básico para heredoc:
RUN <<EOF echo "hello" echo "world" EOF -
Soporte para comentarios dentro de comandos RUN:
RUN echo "hello" \ # this is a comment && echo "world"RUN echo "hello" \ # this is a comment # that spans multiple lines && echo "world" -
Intenta hacer que los comentarios queden correctamente adjuntos a la posición formateada, pero esto es difícil porque los comentarios se eliminan en la etapa del parser
Bindings de JS
- Los bindings de JS están incluidos en el directorio js
- El modo de uso puede consultarse en
js/README.md
Otras notas
- Como todavía es una versión anterior a 1.0.0, no se recomienda su uso en producción
1 comentarios
Comentarios de Hacker News
RUNno soporta agrupación ni punto y coma en los comandosRUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etcRUNno soporta agrupación ni punto y coma en los comandos, pero en el ejemplo muestran que sí soporta&&. Me pregunto por qué la diferenciaRUN foo && \ bar && \ :RUN set -e && \ foo ; \ bar ; \ :FROM foo ... FROM bar ...FROMpara hacer más clara cada etapa. Me parece que no hacerlo es como no indentar el cuerpo de una función en otros lenguajes