30

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

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

4

3 回答 3

21

映像名称应包含注册表主机的 FQDN。因此,如果您愿意,FROM <some private image>必须将其指定为FROM registry_host:5000/foo/bar

将来这将不是一个要求,但不幸的是现在它是。

于 2015-06-18T18:48:37.707 回答
16

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

Dockerfile-项目-开发

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

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

docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .
于 2019-10-09T20:54:23.203 回答
8

docker 人员通常希望确保无论您的本地环境如何,如果您运行docker pull foo/bar,您将获得相同的内容(即foo/bar来自 Docker Hub 的映像)。

这意味着没有任何选项可以让 Docker 在没有明确主机名/端口的情况下使用其他任何东西。

于 2015-06-18T16:33:50.400 回答