在docker build期间从私有存储库中提取docker镜像?

时间:2015-06-18 07:17:50

标签: docker dockerfile docker-registry docker-trusted-registry

docker build而非docker hub期间,有没有办法从私人注册表中提取图片?

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

3 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:7)

docker人员通常希望确保如果您运行select (case when stock.engine = 1 then concat(year(from_unixtime(endtime)), ' Q', quarter(from_unixtime(endtime)) end) as QTR1 ,您将获得相同的内容(即Docker Hub中的docker pull foo/bar图像),无论您当地的环境如何。

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

答案 2 :(得分:1)

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

Dockerfile-project-dev

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

对于我的用例,我通常想从私有存储库中提取,但是如果我正在使用Dockerfile,我可能希望能够在自己的计算机上从映像进行构建,而无需修改FROM行在我的Dockerfile中。要告诉Docker在构建时在本地计算机上搜索映像,我可以这样做:

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