我正在处理dockerfile。 我刚刚意识到我一直在使用FROM索引图像
FROM
所以我想知道:
pushing
你不用做任何特别的事情就可以使用它。如果你有一个名为blah的本地映像,你可以执行FROM blah。如果你在Dockerfile中执行了FROM blah,但不有一个名为blah的本地映像,然后 Docker将尝试从注册表中提取它。
blah
FROM blah
换句话说,如果Dockerfile执行FROM ubuntu,但你有一个名为ubuntu的本地映像,与官方映像不同,你的映像将覆盖它。
FROM ubuntu
ubuntu
已验证:在Docker 1.7.0中运行良好。
运行docker build命令时不要指定--pull=true
docker build
--pull=true
在dockerfile中使用FROM引用本地构建的映像上的这个线程:
如果你想使用本地图像作为基图像,不使用 选项--pull=true --pull=true将总是尝试拉一个更新的
你可以在你的图像中有-字符。假设您有一个名为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
FROM localhost:5000/my-image:with.tag
最后,如果您的图像在提供名称时没有被解析,请尝试在创建图像时向图像添加标记
这个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
对于将来遇到这个问题的任何人来说,你在本地有映像,但docker build仍然试图从docker hub中提取映像,问题可能是架构类型不同。
. IO
可以使用以下命令检查映像的体系结构
docker inspect --format='\{\{.Os}}/\{\{.Architecture}}' IMAGE_NAME
现在在你的Dockerfile中,将FROM IMAGE_NAME更改为类似FROM --platform=linux/amd64 IMAGE_NAME的东西,docker现在将使用本地映像。
FROM IMAGE_NAME
FROM --platform=linux/amd64 IMAGE_NAME
对于使用M1芯片的用户,当本地镜像与目标Dockerfile的平台不同时,就会出现问题。在我的情况下,我已经建立了M1支持的基本映像,然后尝试在映像中使用命令FROM,该映像正在构建平台linux/amd64
linux/amd64
我们的/etc/docker/daemon.json有一行声明
/etc/docker/daemon.json
"disable-legacy-registry" : true,
有了这一行,本地注册表拒绝访问。
我刚刚在引擎版本为20.10.14的M1 Mac上遇到了这种情况。从docker build --help中不明显,但传递--pull=false对我有用。
docker build --help
--pull=false
BUILDKIT
DOCKER_BUILDKIT
DOCKER_BUILDKIT=0 docker build -t YOUR_TAG --pull=false .