Files
docker-stacks/docs/contributing/lint.md
2020-05-30 05:44:53 +02:00

2.1 KiB

Image Lint

To comply with Docker best practices, we are using the Hadolint tool to analyse each Dockerfile .

Installation

There is a specific make target to install the linter. By default hadolint will be installed in ${HOME}/hadolint.

$ make lint-install

# Installing hadolint at /Users/romain/hadolint ...
# Installation done!
# Haskell Dockerfile Linter v1.17.6-0-gc918759

Lint

Per Stack

The linter can be run per stack.

$ make lint/scipy-notebook  

# Linting Dockerfiles in scipy-notebook...
# scipy-notebook/Dockerfile:4 DL3006 Always tag the version of an image explicitly
# scipy-notebook/Dockerfile:11 DL3008 Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
# scipy-notebook/Dockerfile:18 SC2086 Double quote to prevent globbing and word splitting.
# scipy-notebook/Dockerfile:68 SC2086 Double quote to prevent globbing and word splitting.
# scipy-notebook/Dockerfile:68 DL3003 Use WORKDIR to switch to a directory
# scipy-notebook/Dockerfile:79 SC2086 Double quote to prevent globbing and word splitting.
# make: *** [lint/scipy-notebook] Error 1

Optionally you can pass arguments to the linter.

# Use a different export format
$ make lint/scipy-notebook ARGS="--format codeclimate"  

All the Stacks

The linter can be run against all the stacks.

$ make lint-all

Ignoring Rules

Sometimes it is necessary to ignore some rules. The preferred way to do it is to flag ignored rules in the Dockerfile.

It is also possible to ignore rules by using a special comment directly above the Dockerfile instruction you want to make an exception for. Ignore rule comments look like # hadolint ignore=DL3001,SC1081. For example:

# hadolint ignore=DL3006
FROM ubuntu

# hadolint ignore=DL3003,SC1035
RUN cd /tmp && echo "hello!"