img
img copied to clipboard
Make FROM prefer local images to the remote ones
Currently, it looks like FROM tries to resolve the remote image prior to checking if there is a local one. Please see the test below. It's not the mainstream behavior, and might be counterintuitive to lots of people, and in fact it feels so to myself. Moreover, it hinders chained local builds that is what lots of known to me pipelines relies on. IMHO the behavior needs to be vice versa. If there is a local version if should be used, if there are no local one check the remote one. Thanks in advance.
/tmp # cat Dockerfile
FROM alpine
/tmp # cat Dockerfile.from
FROM grayhemp/base:master
/tmp # img build -t grayhemp/base:master -f Dockerfile .
Building docker.io/grayhemp/base:master
Setting up the rootfs... this may take a bit.
[+] Building 3.1s (5/5) FINISHED
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 49B 0.0s
=> [internal] load metadata for docker.io/library/alpine:latest 1.9s
=> [1/1] FROM docker.io/library/alpine@sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1 1.1s
=> => resolve docker.io/library/alpine@sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1 0.0s
=> => sha256:cd784148e3483c2c86c50a48e535302ab0288bebd587accf40b714fffd0646b3 2.21MB / 2.21MB 0.9s
=> => sha256:3f53bb00af943dfdf815650be70c0fa7b426e56a66f5e3362b47a129d57d5991 1.51kB / 1.51kB 0.0s
=> => sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1 2.03kB / 2.03kB 0.0s
=> => sha256:3d2e482b82608d153a374df3357c0291589a61cc194ec4a9ca2381073a17f58e 528B / 528B 0.0s
=> => unpacking docker.io/library/alpine@sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1 0.1s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => exporting manifest sha256:2130e6ad860005d93868ea1caa6003efdd3ebf1a9044ff2afa6ee360e1db2cd7 0.0s
=> => exporting config sha256:87211fd91f8ca080f3aae114dfe55e857195853b2968fd7a9be23bfa2ed91521 0.0s
=> => naming to docker.io/grayhemp/base:master 0.0s
Successfully built docker.io/grayhemp/base:master
/tmp # img build -t test_from -f Dockerfile.from .
Building docker.io/library/test_from:latest
Setting up the rootfs... this may take a bit.
[+] Building 3.6s (5/5) FINISHED
=> [internal] load build definition from Dockerfile.from 0.0s
=> => transferring dockerfile: 68B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/grayhemp/base:master 1.9s
=> [1/1] FROM docker.io/grayhemp/base:master@sha256:eddcbfe94e649cb83dedb8ed69e273c9d3075960f8ea3d88f40ca52fe8efcba8 1.6s
=> => resolve docker.io/grayhemp/base:master@sha256:eddcbfe94e649cb83dedb8ed69e273c9d3075960f8ea3d88f40ca52fe8efcba8 0.0s
=> => sha256:eddcbfe94e649cb83dedb8ed69e273c9d3075960f8ea3d88f40ca52fe8efcba8 738B / 738B 0.0s
=> => sha256:8033a25bb71115027245f829c8366dafa95ef65b745a9f3d0ae97c7a4568a53e 1.48MB / 1.48MB 0.8s
=> => sha256:30aaac51475ae0a366a67dd3ce24b4e8f59d85cf912970e90274d5134bcdcca7 876B / 876B 0.0s
=> => sha256:4fe2ade4980c2dda4fc95858ebb981489baec8c1e4bd282ab1c3560be8ff9bde 2.21MB / 2.21MB 1.1s
=> => unpacking docker.io/grayhemp/base:master@sha256:eddcbfe94e649cb83dedb8ed69e273c9d3075960f8ea3d88f40ca52fe8efcba8 0.5s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => exporting manifest sha256:eddcbfe94e649cb83dedb8ed69e273c9d3075960f8ea3d88f40ca52fe8efcba8 0.0s
=> => exporting config sha256:30aaac51475ae0a366a67dd3ce24b4e8f59d85cf912970e90274d5134bcdcca7 0.0s
=> => naming to docker.io/library/test_from:latest 0.0s
Successfully built docker.io/library/test_from:latest