23

たとえば、Dockerfile が誤って記述されている場合:

CMD ["service", "--config", "/etc/service.conf](引用がない)

構築する前にそのような間違いを検出するためにリントする方法はありますか?

4

6 に答える 6

24

試す:

RUNADDENVおよびCMD. _ dockerlinterは、同じルール違反をグループ化することについては賢明でしたが、hadolinterおそらくShellcheckBash コードを静的に分析することができなかったため、徹底的に検査することができませんでした。

dockerlinterlint できる範囲では不十分ですが、インストールははるかに簡単なようです。npm install -g dockerlinterコンパイルhadolinterにはHaskellコンパイラとコンパイルに永遠にかかるビルド環境が必要ですが、そうします。

$ hadolint ./api/Dockerfile
L9 SC2046 Quote this to prevent word splitting.
L11 SC2046 Quote this to prevent word splitting.
L8 DL3020 Use COPY instead of ADD for files and folders
L10 DL3020 Use COPY instead of ADD for files and folders
L13 DL3020 Use COPY instead of ADD for files and folders
L18 DL3020 Use COPY instead of ADD for files and folders
L21 DL3020 Use COPY instead of ADD for files and folders
L6 DL3008 Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
L6 DL3009 Delete the apt-get lists after installing something
L6 DL3015 Avoid additional packages by specifying `--no-install-recommends`

$ dockerlint ./api/Dockerfile
WARN:  ADD instruction used instead of COPY on line 8, 10, 13, 18, 21
ERROR: ./api/Dockerfile failed.

2018年更新。現在、公式の Docker リポジトリがあるためhadolint、実行可能ファイルをすばやく取得できます。

id=$(docker create hadolint/hadolint:latest)
docker cp "$id":/bin/hadolint .
docker rm "$id"

または、このコマンドを使用できます

docker container run --rm -i hadolint/hadolint hadolint - < Dockerfile

これは静的にコンパイルされた実行可能ファイル ( によるldd hadolint) であるため、インストールされているライブラリに関係なく実行する必要があります。実行可能ファイルのビルド方法に関するリファレンス: https://github.com/hadolint/hadolint/blob/master/docker/Dockerfile

于 2016-01-12T19:19:47.743 に答える
3

RedHat サブスクリプションをお持ちの場合は、 https: //access.redhat.com/labs/linterfordockerfile/ で「Linter for Dockerfile」アプリケーションに直接アクセスできます。アプリケーションに関する情報は、https://access.redhat.com/labsinfo/linterfordockerfileにあります。

この Node.js アプリケーションは、ローカルで実行する場合は、GitHub https://github.com/redhataccess/dockerfile_lintでも入手できます。

于 2015-02-11T07:09:16.540 に答える
1

以前の回答で述べたdockerfile-lintを使用する VS Code の拡張機能としてdockerfile-validatorを作成しました。デフォルトでは dockerfile-lint のデフォルト ルールを使用しますが、VS コードのユーザー設定 (dockerfile-validator.rulefile.path) では、独自のコーディング標準でカスタム ルール ファイルへのパスを指定できます。

于 2018-06-02T12:58:16.887 に答える
0

Recently, I cam across dockerfilelint which is NodeJS based.

dockerfilelint Dockerfile

Supports following rules and rudimentary CMD checks

required_params
uppercase_commands
from_first
invalid_line
sudo_usage
apt-get_missing_param
apt-get_recommends
apt-get-upgrade
apt-get-dist-upgrade
apt-get-update_require_install
apkadd-missing_nocache_or_updaterm
apkadd-missing-virtual
invalid_port
invalid_command
expose_host_port
label_invalid
missing_tag
latest_tag
extra_args
missing_args
add_src_invalid
add_dest_invalid
invalid_workdir
invalid_format
apt-get_missing_rm
deprecated_in_1.13

Hadolint seems like a better option but this may suffice for simple needs. Also, Github's super-linter uses this.

于 2020-07-10T23:05:16.680 に答える