A Dockerfile linting tool which aims to pull many best practices and recommendations from multiple sources:
- OWASP
- Docker Official Documentation
- Community recommendations
- Package manager bug trackers
Check out the currently supported rules.
docked analyze ./Dockerfile
And, it's customizable. You can ignore, re-prioritize, or add custom rules via regex. There's also JSON and HTML outputs.
Latest binary releases are available via GitHub Releases.
brew install jimschubert/tap/docked
docker pull jimschubert/docked:latest
When running the docker image, be sure to mount and reference the sources appropriately. For example:
After you've installed the binary either manually or via Homebrew, consider enabling completions for your shell.
For instructions, view help for your target shell.
docked completion zsh --help
docked completion bash --help
docked completion fish --help
docked completion powershell --help
$ docked analyze --help
Analyze a Dockerfile for issues
If not provided, FILE defaults to ./Dockerfile
Usage:
docked analyze [FILE] [flags]
Flags:
-h, --help help for analyze
-i, --ignore strings The lint ids to ignore
-k, --no-buildkit-warnings Whether to suppress Docker parser warnings
--regex-engine string The regex engine to use (regexp, regexp2) (default "regexp2")
--report-type string The type of reporting output (text, json, html) (default "text")
Global Flags:
--config string config file (default is $HOME/.docked.yaml)
--viper use Viper for configuration (default true)
Things to consider:
- Buildkit warnings should be disabled when piping output (for example when using
--report-type json
), but this is not forced - The
regexp2
engine is default because it supports full regular expression syntax. Compare differences in regexp2's README. Note thatregexp2
patterns are not run in compatibility mode in docked, although that might change later. viper
configuration is work-in-progress. Feel free to contribute.
The optional configuration file follows this example syntax:
ignore:
- D7:tagged-latest
rule_overrides:
'D5:secret-aws-access-key': low
custom_rules:
- name: custom-name
summary: Your custom summary
details: Your additional rule details
pattern: '.' # some regex pattern
priority: critical
command: add
Build a local distribution for evaluation using goreleaser (easiest).
goreleaser release --skip-publish --snapshot --rm-dist
This will create an executable application for your os/architecture under dist
:
dist
├── docked_darwin_amd64
│ └── docked
├── docked_linux_386
│ └── docked
├── docked_linux_amd64
│ └── docked
├── docked_linux_arm64
│ └── docked
├── docked_linux_arm_6
│ └── docked
└── docked_windows_amd64
└── docked.exe
Build and execute locally using go:
- Get dependencies
go get -d ./...
- Build
go build -o docked ./cmd/docked/
- Run
./docked --help
This project is licensed under Apache 2.0.