在docker构建期间从私有存储库中提取docker映像?
在docker build期间,是否有任何方法可以从私有注册表而不是docker hub中提取图像在docker构建期间从私有存储库中提取docker映像?,docker,dockerfile,docker-registry,docker-trusted-registry,Docker,Dockerfile,Docker Registry,Docker Trusted Registry,在docker build期间,是否有任何方法可以从私有注册表而不是docker hub中提取图像 我部署了一个私有注册表,我希望能够避免在Dockerfile的FROM指令中命名其特定的ip:port。我期待一个docker build选项或一个docker环境变量来更改默认注册表。docker人员通常希望确保,无论您的本地环境如何,如果运行docker pull foo/bar,您都会得到相同的结果(即来自docker Hub的foo/bar图像) 这意味着如果没有明确的主机名/端口,Doc
我部署了一个私有注册表,我希望能够避免在Dockerfile的
FROM
指令中命名其特定的ip:port
。我期待一个docker build
选项或一个docker环境变量来更改默认注册表。docker人员通常希望确保,无论您的本地环境如何,如果运行docker pull foo/bar
,您都会得到相同的结果(即来自docker Hub的foo/bar
图像)
这意味着如果没有明确的主机名/端口,Docker将无法使用任何其他选项。映像名称应包括注册表主机的FQDN。 因此,如果您想从获取
,必须将其指定为来自注册表的\u主机:5000/foo/bar
在未来,这将不是一个要求,但不幸的是,现在它是。我在2019年面临同样的问题。我使用参数(ARG)解决了这个问题。
参数允许您设置可在FROM行中使用的可选参数(默认值)
Dockerfile项目开发
ARG REPO_LOCATION=privaterepo.company.net/
ARG BASE_VERSION=latest
FROM ${REPO_LOCATION}project/base:${BASE_VERSION}
...
对于我的用例,我通常希望从私有回购中提取,但是如果我正在处理Dockerfile,我可能希望能够从我自己机器上的映像构建,而不必修改Dockerfile中的from行。要让Docker在构建时搜索本地计算机中的图像,我将执行以下操作:
docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .
它在什么地方有记录吗?在不修改每个docker文件的情况下使用注册表镜像是不可能的。我不认为有明确的文档记录,但它已经出现在问题跟踪器和邮件列表中。@JulioGuerra您可以在镜像模式下设置注册表,并告诉docker有关镜像的信息。无需更改图像名称即可将其从镜像中拉出。您可以说,将来这将不是一个要求。来源?@starbeamrainbowlabs这个答案最初是在2015年给出的。我认为这是“未来”功能,当时。我在回答中提到的在FROM中使用ARGs的文档(至少)是在2017年添加的。我没有再挖了。