在 docker 构建期间从私有存储库中提取 docker 图像?
Pull docker images from a private repository during docker build?
有没有办法在 docker build
而不是 docker 集线器期间从私有注册表中提取图像?
我部署了一个私有注册表,我希望能够避免在 Dockerfile 的 FROM
指令中命名其特定的 ip:port
。我期待 docker build
选项或 docker 环境变量来更改默认注册表。
docker 的人通常希望确保如果你 运行 docker pull foo/bar
你会得到同样的东西(即 foo/bar
图片来自 Docker Hub) 无论您的本地环境如何。
这意味着没有选项可以让 Docker 在没有显式 hostname/port 的情况下使用其他任何东西。
映像名称应包含注册表主机的 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 行中使用的可选参数(具有默认值)。
Docker文件-项目-开发
ARG REPO_LOCATION=privaterepo.company.net/
ARG BASE_VERSION=latest
FROM ${REPO_LOCATION}project/base:${BASE_VERSION}
...
对于我的用例,我通常想从私人仓库中提取,但如果我正在处理 Docker 文件,我可能希望能够从我自己机器上的图像构建,无需修改我的 Docker 文件中的 FROM 行。要告诉 Docker 在构建时在我的本地机器上搜索图像,我会这样做:
docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .
有没有办法在 docker build
而不是 docker 集线器期间从私有注册表中提取图像?
我部署了一个私有注册表,我希望能够避免在 Dockerfile 的 FROM
指令中命名其特定的 ip:port
。我期待 docker build
选项或 docker 环境变量来更改默认注册表。
docker 的人通常希望确保如果你 运行 docker pull foo/bar
你会得到同样的东西(即 foo/bar
图片来自 Docker Hub) 无论您的本地环境如何。
这意味着没有选项可以让 Docker 在没有显式 hostname/port 的情况下使用其他任何东西。
映像名称应包含注册表主机的 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 行中使用的可选参数(具有默认值)。
Docker文件-项目-开发
ARG REPO_LOCATION=privaterepo.company.net/
ARG BASE_VERSION=latest
FROM ${REPO_LOCATION}project/base:${BASE_VERSION}
...
对于我的用例,我通常想从私人仓库中提取,但如果我正在处理 Docker 文件,我可能希望能够从我自己机器上的图像构建,无需修改我的 Docker 文件中的 FROM 行。要告诉 Docker 在构建时在我的本地机器上搜索图像,我会这样做:
docker build -t project/dev:latest -f ./Dockerfile-project-dev --build-arg REPO_LOCATION='' .