在docker build
而非docker hub期间,有没有办法从私人注册表中提取图片?
我部署了一个私有注册表,我希望能够避免在Dockerfile的ip:port
指令中命名其特定的FROM
。我期待docker build
选项或docker环境变量来更改默认注册表。
答案 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='' .