有没有一种方法来干扰Dockerfile?

如果Dockerfile写有错误,例如:

CMD ["service", "--config", "/etc/service.conf] (缺less引用)

在构build之前有没有办法检测到这种错误?

尝试:

  • Haskell Dockerfile Linter(“hadolinter”)也可以在线获得 。 hadolinterhadolinterparsing为AST,并根据最佳实践Docker镜像规则执行检查和validation。 它还使用Shellcheck在RUN命令上修饰 Bash代码。
  • 或者dockerlinter (基于node.js)。

我已经用RUNADDENVCMD对一个简单的Docker文件进行了一个简单的testing。 dockerlinter聪明地将同样的规则分组在一起,但是它不能像hadolinter一样彻底地检查,可能是因为缺less用于静态分析Bash代码的Shellcheck

虽然dockerlinter在它的范围内可以降低,但它似乎更容易安装。 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. 

如果您拥有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上使用&#x3002;

我不太熟悉,但是看起来你可以简单地调用Parse方法,就像在这里的testing套件中所做的那样。 如果这不返回一个错误,那么你的皮棉通过。 我假设这是微不足道的暴露给脚本或在开发过程中调用的东西。

我在CIpipe道npm的dockerfile_lint中使用非常成功。 您可以添加或扩展规则。 使用package.json可以为不同的作业创build不同的configuration。 有两个

Docker CLI

 docker run -it --rm --privileged -v `pwd`:/root/ \ projectatomic/dockerfile-lint \ dockerfile_lint [-f Dockerfile] docker run -it --rm --privileged -v `pwd`:/root/ \ -v /var/run/docker.sock:/var/run/docker.sock \ projectatomic/dockerfile-lint \ dockerfile_lint image <imageid> 

和Atomic CLI可用

  atomic run projectatomic/dockerfile-lint atomic run projectatomic/dockerfile-lint image <imageid> 

你也可以把你的图片用于标记。