Docker Engine 27+ uses new BuildKit 0.14+ to build images by default, and BuildKit 0.14.x has new feature that validates if syntax in Dockerfile meet best practices.
Many new validation rules have been added to verify that your Dockerfile is using best practices. These rules are validated during build and new "lint" subrequest can be used to only trigger validation without completing the whole build.
https://github.com/moby/buildkit/releases/tag/dockerfile/1.8.0
# Base build stage
FROM $EE_BASE_IMAGE as base
...
# Galaxy build stage
FROM base as galaxy
...
# Builder build stage
FROM base as builder
...
# Final build stage
FROM base as final
This will result in a successful build, but some warnings to be displayed:
$ ansible-builder build --tag registry.example.com/ansible/ee:2.17-minimal --container-runtime docker --verbosity 3
Ansible Builder is generating your execution environment build context.
...
Ansible Builder is building your execution environment image. Tags: registry.example.com/ansible/ee:2.17-minimal
Running command:
docker build -f context/Dockerfile -t registry.example.com/ansible/ee:2.17-minimal context
#0 building with "default" instance using docker driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 2.96kB done
#1 WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 11) ✅
#1 WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 31) ✅
#1 WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 50) ✅
#1 WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 70) ✅
...
#31 [final 9/9] RUN rm -rf /output
#31 DONE 0.1s
#32 exporting to image
#32 exporting layers
#32 exporting layers 0.6s done
#32 writing image sha256:73227f703dbf35eb822caa325f0db8593fb10719bbb64d21615ea7ddd50df04e done
#32 naming to registry.example.com/ansible/ee:2.17-minimal done
#32 DONE 0.6s
4 warnings found (use --debug to expand): ✅
- FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 11) ✅
- FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 31) ✅
- FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 50) ✅
- FromAsCasing: 'as' and 'FROM' keywords' casing do not match (line 70) ✅
Complete! The build context can be found at: /home/********/builder/context
Environment
$ docker version
Client: Docker Engine - Community
Version: 27.0.1-rc.1
API version: 1.46
Go version: go1.21.11
Git commit: 0d415ad
Built: Thu Jun 20 15:59:18 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 27.0.1-rc.1
API version: 1.46 (minimum version 1.24)
Go version: go1.21.11
Git commit: 018d93d
Built: Thu Jun 20 15:57:34 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.18
GitCommit: ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
runc:
Version: 1.7.18
GitCommit: v1.1.13-0-g58aa920
docker-init:
Version: 0.19.0
GitCommit: de40ad0
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default* docker
\_ default \_ default running v0.14.1 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
Steps to reproduce
Install docker engine 27+
Build EE with following yaml with --container-runtime docker
Description
Docker Engine 27+ uses new BuildKit 0.14+ to build images by default, and BuildKit 0.14.x has new feature that validates if syntax in Dockerfile meet best practices.
Refer to the
Build checks
section of Docker Docs to see which rules are validated: https://docs.docker.com/reference/build-checks/The problem is, the
Dockerfile
that generated by current ansible-builder does not follow this rule;FROM
is uppercased butas
is lowercased: https://docs.docker.com/reference/build-checks/from-as-casing/This will result in a successful build, but some warnings to be displayed:
Environment
Steps to reproduce
Build EE with following yaml with
--container-runtime docker