dockerfilelint
dockerfilelint documentation
- Version in MegaLinter: 1.8.0
- Visit Official Web Site
- See How to configure dockerfilelint rules
- If custom
.dockerfilelintrc
config file is not found, .dockerfilelintrc will be used
- If custom
- See Index of problems detected by dockerfilelint
Configuration in MegaLinter
- Enable dockerfilelint by adding
DOCKERFILE_DOCKERFILELINT
in ENABLE_LINTERS variable - Disable dockerfilelint by adding
DOCKERFILE_DOCKERFILELINT
in DISABLE_LINTERS variable
Variable | Description | Default value |
---|---|---|
DOCKERFILE_DOCKERFILELINT_ARGUMENTS | User custom arguments to add in linter CLI call Ex: -s --foo "bar" |
|
DOCKERFILE_DOCKERFILELINT_FILTER_REGEX_INCLUDE | Custom regex including filter Ex: (src\|lib) |
Include every file |
DOCKERFILE_DOCKERFILELINT_FILTER_REGEX_EXCLUDE | Custom regex excluding filter Ex: (test\|examples) |
Exclude no file |
DOCKERFILE_DOCKERFILELINT_CLI_LINT_MODE | Override default CLI lint mode - file : Calls the linter for each file- list_of_files : Call the linter with the list of files as argument- project : Call the linter from the root of the project |
file |
DOCKERFILE_DOCKERFILELINT_FILE_EXTENSIONS | Allowed file extensions. "*" matches any extension, "" matches empty extension. Empty list excludes all filesEx: [".py", ""] |
Exclude every file |
DOCKERFILE_DOCKERFILELINT_FILE_NAMES_REGEX | File name regex filters. Regular expression list for filtering files by their base names using regex full match. Empty list includes all files Ex: ["Dockerfile(-.+)?", "Jenkinsfile"] |
["Dockerfile"] |
DOCKERFILE_DOCKERFILELINT_PRE_COMMANDS | List of bash commands to run before the linter | None |
DOCKERFILE_DOCKERFILELINT_POST_COMMANDS | List of bash commands to run after the linter | None |
DOCKERFILE_DOCKERFILELINT_CONFIG_FILE | dockerfilelint configuration file nameUse LINTER_DEFAULT to let the linter find it |
.dockerfilelintrc |
DOCKERFILE_DOCKERFILELINT_RULES_PATH | Path where to find linter configuration file | Workspace folder, then MegaLinter default rules |
DOCKERFILE_DOCKERFILELINT_DISABLE_ERRORS | Run linter but consider errors as warnings | false |
DOCKERFILE_DOCKERFILELINT_DISABLE_ERRORS_IF_LESS_THAN | Maximum number of errors allowed | 0 |
MegaLinter Flavours
This linter is available in the following flavours
Flavor | Description | Embedded linters | Info | |
---|---|---|---|---|
all | Default MegaLinter Flavor | 97 | ||
ci_light | Optimized for CI items (Dockerfile, Jenkinsfile, JSON/YAML schemas,XML | 16 | ||
dart | Optimized for DART based projects | 42 | ||
documentation | MegaLinter for documentation projects | 41 | ||
dotnet | Optimized for C, C++, C# or VB based projects | 49 | ||
go | Optimized for GO based projects | 43 | ||
java | Optimized for JAVA based projects | 43 | ||
javascript | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 50 | ||
php | Optimized for PHP based projects | 46 | ||
python | Optimized for PYTHON based projects | 49 | ||
ruby | Optimized for RUBY based projects | 42 | ||
rust | Optimized for RUST based projects | 42 | ||
salesforce | Optimized for Salesforce based projects | 44 | ||
scala | Optimized for SCALA based projects | 42 | ||
swift | Optimized for SWIFT based projects | 42 | ||
terraform | Optimized for TERRAFORM based projects | 47 |
Behind the scenes
How are identified applicable files
- File names (regex):
Dockerfile
How the linting is performed
- dockerfilelint is called one time by identified file
Example calls
dockerfilelint Dockerfile
Help content
Usage: dockerfilelint [files | content..] [options]
Options:
-o, --output Specify the format to use for output of linting results. Valid values
are `json` or `cli` (default). [string]
-j, --json Output linting results as JSON, equivalent to `-o json`. [boolean]
-c, --config Path for .dockerfilelintrc configuration file [string]
-v, --version Show version number [boolean]
-h, --help Show help [boolean]
Examples:
dockerfilelint Dockerfile Lint a Dockerfile in the current working directory
dockerfilelint test/example/* -j Lint all files in the test/example directory and
output results in JSON
dockerfilelint 'FROM latest' Lint the contents given as a string on the command
line
dockerfilelint < Dockerfile Lint the contents of Dockerfile via stdin
Installation on mega-linter Docker image
- NPM packages (node.js):
Example success log
Results of dockerfilelint linter (version 1.8.0)
See documentation on https://megalinter.github.io/descriptors/dockerfile_dockerfilelint/
-----------------------------------------------
[SUCCESS] .automation/test/docker/good/Dockerfile
File: .automation/test/docker/good/Dockerfile
Issues: None found 👍
[SUCCESS] .automation/test/docker/good/Dockerfile.dev
File: .automation/test/docker/good/Dockerfile.dev
Issues: None found 👍
Example error log
Results of dockerfilelint linter (version 1.8.0)
See documentation on https://megalinter.github.io/descriptors/dockerfile_dockerfilelint/
-----------------------------------------------
[ERROR] .automation/test/docker/bad/Dockerfile
File: .automation/test/docker/bad/Dockerfile
Issues: 5
Line 1: from node:latest
Issue Category Title Description
1 Clarity Capitalize For clarity and readability, all instructions in a Dockerfile
Dockerfile should be uppercase.
Instructions This is a convention adopted by most of the official images and
greatly improves readability in long Dockerfiles. For an example
of
why this makes a difference, check out the current [redis
Dockerfile](https://github.com/docker-library/redis/blob/b375650fb6
9b7db819e90c0033433c705b28656e/3.0/Dockerfile)
and you should be able to easily see the instructions used.
Line 4: run mkdir -p /usr/src/app
Issue Category Title Description
2 Clarity Capitalize For clarity and readability, all instructions in a Dockerfile
Dockerfile should be uppercase.
Instructions This is a convention adopted by most of the official images and
greatly improves readability in long Dockerfiles. For an example
of
why this makes a difference, check out the current [redis
Dockerfile](https://github.com/docker-library/redis/blob/b375650fb6
9b7db819e90c0033433c705b28656e/3.0/Dockerfile)
and you should be able to easily see the instructions used.
Line 8: copy package.json /usr/src/app/ /here/there
Issue Category Title Description
3 Clarity Capitalize For clarity and readability, all instructions in a Dockerfile
Dockerfile should be uppercase.
Instructions This is a convention adopted by most of the official images and
greatly improves readability in long Dockerfiles. For an example
of
why this makes a difference, check out the current [redis
Dockerfile](https://github.com/docker-library/redis/blob/b375650fb6
9b7db819e90c0033433c705b28656e/3.0/Dockerfile)
and you should be able to easily see the instructions used.
Line 9: RUN sudo npm install
Issue Category Title Description
4 Possible Bug Use Of sudo Is Not Use of `sudo` is not allowed in a Dockerfile. From the official
Allowed document [Best practices for writing
Dockerfiles](https://docs.docker.com/engine/userguide/eng-image/doc
kerfile_best-practices/):
> You should avoid installing or using `sudo` since it has
unpredictable TTY and signal-forwarding behavior that can cause
more problems than it solves.
> If you absolutely need functionality similar to `sudo` (e.g.,
initializing the daemon as root but running it as non-root), you
may be able to use `gosu`.
Line 14: ENtrypoint /tmp/here.sh
Issue Category Title Description
5 Clarity Capitalize For clarity and readability, all instructions in a Dockerfile
Dockerfile should be uppercase.
Instructions This is a convention adopted by most of the official images and
greatly improves readability in long Dockerfiles. For an example
of
why this makes a difference, check out the current [redis
Dockerfile](https://github.com/docker-library/redis/blob/b375650fb6
9b7db819e90c0033433c705b28656e/3.0/Dockerfile)
and you should be able to easily see the instructions used.