如何使用dockerfile将本地图像用作基础图像?

我正在处理dockerfile。 我只是意识到我一直在使用FROM索引图像。

所以我想知道:

  • 我怎样才能使用我的本地(自定义)图像作为我的基地( FROM )图像之一,而不会pushing到索引?

你可以使用它而不做任何特别的事情。 如果你有一个叫做blah的本地图像,你可以做FROM blah 。 如果你在你的Dockerfile中做了FROM blah ,但是没有叫做blah的本地图片, 那么 Docker会尝试从registry中取出它。

换句话说,如果一个Dockerfile执行FROM ubuntu ,但是你有一个名为ubuntu的本地映像与官方映像不同,你的映像将覆盖它。

已validation:在Docker 1.7.0中运行良好。

顺便说一句,运行--pull=true docker build命令时不要指定--pull=true

if you want use the local image as the base image, please without the option --pull=true, --pull=true will always attempt to pull a newer version of the image.

https://github.com/docker/docker/issues/14943

我没有声望添加评论(@defreitas),所以添加它作为答案。 你可以有 – 字符在你的图像。 假设你有一个名为centos-base-image,标签为7.3.1611的本地映像(不是本地registry)。

 docker version Client: Version: 1.12.6 API version: 1.24 Package version: docker-common-1.12.6-16.el7.centos.x86_64 Go version: go1.7.4 Server: Version: 1.12.6 API version: 1.24 Package version: docker-common-1.12.6-16.el7.centos.x86_64 Go version: go1.7.4 docker images REPOSITORY TAG centos-base-image 7.3.1611 

Dockerfile

 FROM centos-base-image:7.3.1611 RUN yum -y install epel-release libaio bc flex 

结果

 Sending build context to Docker daemon 315.9 MB Step 1 : FROM centos-base-image:7.3.1611 ---> c4d84e86782e Step 2 : RUN yum -y install epel-release libaio bc flex ---> Running in 36d8abd0dad9 ... 

在上面的示例中, FROM是获取本地图像,您可以提供额外的说明从您的自定义registry中获取图像(例如FROM localhost:5000/my-image:with.tag )。 请参阅https://docs.docker.com/engine/reference/commandline/pull/#pull-from-a-different-registry和https://docs.docker.com/registry/#tldr

最后,如果您的图像在提供名称时未被parsing,请尝试在创build图像时向图像添加标签

 https://docs.docker.com/engine/reference/commandline/commit/ 

这种forms描述了类似的问题

 https://github.com/moby/moby/issues/8975 

通过省略一个特定的标签,docker将寻找一个标记为“latest”的图像,所以要么使用:latest标签创build一个图像,要么改变你的FROM

添加上面的链接作为代码块,因为我没有足够的代表发布更多的2个链接…;)