我正在做一个dockerfile。 我刚刚意识到我一直在使用FROM索引图像。
所以我想知道:
我如何使用我的一个本地(自定义)图像作为我的基础(FROM)图像而不推到索引?
我正在做一个dockerfile。 我刚刚意识到我一直在使用FROM索引图像。
所以我想知道:
我如何使用我的一个本地(自定义)图像作为我的基础(FROM)图像而不推到索引?
当前回答
我刚刚在引擎版本为20.10.14的M1 Mac上遇到了这种情况。从docker build -help看不太明显,但pass -pull=false对我有用。
其他回答
我们/etc/docker/daemon.Json有一行声明
"disable-legacy-registry" : true,
有了这条线,当地的登记处拒绝访问。 除去了它,它开始工作了。
对于将来遇到这个问题的任何人来说,你在本地有映像,但docker build仍然试图从docker hub中提取映像,问题可能是架构类型不同。
可以使用以下命令检查映像的体系结构
docker inspect --format='{{.Os}}/{{.Architecture}}' IMAGE_NAME
现在在Dockerfile中,将从IMAGE_NAME更改为FROM——platform=linux/amd64 IMAGE_NAME, docker现在将使用本地映像。
你可以在你的图像中有-字符。假设您有一个名为centos-base-image的本地映像(不是本地注册表),标记为7.3.1611。
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正在获取您的本地映像,您可以提供额外的指令来从您的自定义注册表中获取映像(例如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
最后,如果在提供名称时无法解析图像,请尝试在创建图像时向图像添加标记
这个GitHub线程描述了一个类似的问题,即无法按名称找到本地图像。
通过省略一个特定的标签,docker将寻找一个标记为“latest”的图像,所以要么创建一个带有:latest标签的图像,要么改变你的FROM
记住,不仅要放标签,还要放标签所在的存储库,如下所示:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
elixir 1.7-centos7_3 e15e6bf57262 20 hours ago 925MB
你应该这样引用它:
elixir:1.7-centos7_3
你不用做任何特别的事情就可以使用它。如果你有一个名为blah的本地映像,你可以使用FROM blah。如果你在Dockerfile中使用了FROM blah,但是没有名为blah的本地映像,那么Docker将尝试从注册表中提取它。
换句话说,如果Dockerfile FROM ubuntu,但是你有一个不同于官方的本地映像,你的映像将覆盖它。