在 docker 构建期间从私有存储库中提取 docker 图像?

Pull docker images from a private repository during docker build?

有没有办法在 docker build 而不是 docker 集线器期间从私有注册表中提取图像?

我部署了一个私有注册表,我希望能够避免在 Dockerfile 的 FROM 指令中命名其特定的 ip:port。我期待 docker build 选项或 docker 环境变量来更改默认注册表。

docker 的人通常希望确保如果你 运行 docker pull foo/bar 你会得到同样的东西(即 foo/bar 图片来自 Docker Hub) 无论您的本地环境如何。

这意味着没有选项可以让 Docker 在没有显式 hostname/port 的情况下使用其他任何东西。

映像名称应包含注册表主机的 FQDN。 所以如果你想 FROM <some private image> 你必须将它指定为 FROM registry_host:5000/foo/bar

将来这将不是必需的,但不幸的是现在是。

我在 2019 年遇到了同样的问题。我使用参数 (ARG) 解决了这个问题。
https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
参数允许您设置可在 FROM 行中使用的可选参数(具有默认值)。

Docker文件-项目-开发

ARG REPO_LOCATION=privaterepo.company.net/
ARG BASE_VERSION=latest
FROM ${REPO_LOCATION}project/base:${BASE_VERSION}
...

对于我的用例,我通常想从私人仓库中提取,但如果我正在处理 Docker 文件,我可能希望能够从我自己机器上的图像构建,无需修改我的 Docker 文件中的 FROM 行。要告诉 Docker 在构建时在我的本地机器上搜索图像,我会这样做:

docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .