我正在处理一个dockerfile。
我刚意识到,我一直在使用带有索引的镜像 FROM
。
所以我想知道:
- 我如何使用一个本地(定制的)镜像作为我的基础镜像 (
FROM
),而不必将其推送
到索引中?
我正在处理一个dockerfile。
我刚意识到,我一直在使用带有索引的镜像 FROM
。
所以我想知道:
FROM
),而不必将其 推送
到索引中?您可以直接使用而无需进行任何特殊处理。如果您有一个名为 blah
的本地镜像,则可以执行 FROM blah
。如果您在Dockerfile中执行 FROM blah
,但是没有名为 blah
的本地镜像,则Docker将尝试从注册表中拉取它。
换句话说,如果一个Dockerfile执行了 FROM ubuntu
,但是您有一个不同于官方版本的名为 ubuntu
的本地镜像,则您的镜像将覆盖它。
DOCKER_BUILDKIT=0 docker build -t <新镜像名称> .
参考链接:https://stackoverflow.com/a/74023547/3962816Docker版本:20.10.7,Mac M1芯片。 - undefined已验证:它可以在Docker 1.7.0中正常工作。
运行docker build
命令时,请不要指定--pull=true
。
参考此Dockerfile中使用FROM引用本地构建的镜像主题:
如果您想使用本地镜像作为基础镜像,请不要使用
--pull=true
选项。
--pull=true
将始终尝试拉取更新版本的镜像。
my-image
),则你的docker将无法在本地解析此镜像。我不知道为什么会这样,但是要解决这个问题,简单地不使用"-"字符即可。此方法已在docker-compose 1.8和docker 1.11上进行了测试。 - deFreitasDocker 版本 17.06.2-ce, build cec0b72
上使用有连字符的名称没有问题,但是请确保如果你标记了你的镜像,你需要将标记作为镜像规范的一部分包含进去(FROM localimage:tag)。 - Scott我在M1芯片的Mac上必须禁用BUILDKIT
才能使用本地镜像。
您可以通过将DOCKER_BUILDKIT
环境变量设置为0来完成它。
DOCKER_BUILDKIT=0 docker build -t YOUR_TAG --pull=false .
您的图片中可以包含“-”字符。假设您有一个本地镜像(而不是本地注册表),名称为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
对于使用 MAC os m1 架构的任何人,我需要在基础镜像之前添加 --platform=linux/amd64
参数。例如:
FROM --platform=linux/amd64 baseImage:tag
FROM --platform=linux/amd64 myimagename:2.0.0.a
i.e.
docker build . --tag chrome-nodejs-java --platform=linux/amd64
,那么在 FROM
之后应该指定平台。docker images
中有一个特定名称和标签的镜像(不是标记为 latest
),那么必须指定该标签。更简单的方法可能就是只使用 IMAGE ID。
FROM c08a03a92df0
docker images
。docker inspect imagenameOrID
或docker inspect --format='{{.Os}}/{{.Architecture}}' imagenameOrID
latest
,即没有标签构建)不起作用,但对于myimagename:2.0.0.a起作用。docker images
中没有带有latest
标签的镜像,则不能在不指定版本标签的情况下使用FROM
。
感谢@jpetazzo、@Anuj Bansal和@SomeGuy的高票回答。
自 Docker 23.0 版本开始,docker build
已成为 docker buildx build
的别名。
如果您正在使用自定义的构建器实例,请使用以下命令将构建器实例设置为 default
,然后再次运行构建命令。
docker buildx use default
您可以使用以下命令列出您的构建器实例:
docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
mybuilder docker-container
mybuilder0 unix:///var/run/docker.sock running v0.12.1 linux/arm64*, linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
default * docker
default default running v0.11.6+0a15675913b7 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
这是一个愚蠢的解决方法,但是...如果您的图像名称为blah
并且具有b2d34289abae
的ID,则可以更改Docker文件中的FROM
行:
FROM blah
变成
FROM b2d34289abae
您可以通过执行docker images
来获取图像ID。
然而,我建议您将其视为临时解决方法,仅用于本地测试或类似情况。
docker image ls
的输出中,在“REPOSITORY”列下找到图像名称,在“TAG”列下找到标签。请注意,不要更改原意,让翻译更通俗易懂。 - codeman48