有没有办法在 adocker build
而不是 docker hub 期间从私有注册表中提取图像?
我部署了一个私有注册表,我希望能够避免ip:port
在 Dockerfile 的FROM
指令中对其进行命名。我期待一个docker build
选项或 docker 环境变量来更改默认注册表。
有没有办法在 adocker build
而不是 docker hub 期间从私有注册表中提取图像?
我部署了一个私有注册表,我希望能够避免ip:port
在 Dockerfile 的FROM
指令中对其进行命名。我期待一个docker build
选项或 docker 环境变量来更改默认注册表。
映像名称应包含注册表主机的 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 行中使用的可选参数(具有默认值)。
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='' .
docker 人员通常希望确保无论您的本地环境如何,如果您运行docker pull foo/bar
,您将获得相同的内容(即foo/bar
来自 Docker Hub 的映像)。
这意味着没有任何选项可以让 Docker 在没有明确主机名/端口的情况下使用其他任何东西。