【问题标题】:Pull docker images from a private repository during docker build?在 docker build 期间从私有存储库中提取 docker 映像?
【发布时间】:2015-09-03 16:58:37
【问题描述】:

有没有办法在 docker build 而不是 docker hub 期间从私有注册表中提取图像?

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

【问题讨论】:

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


    【解决方案1】:

    Docker 人员通常希望确保无论您的本地环境如何,如果您运行 docker pull foo/bar,您将获得相同的内容(即来自 Docker Hub 的 foo/bar 映像)。

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

    【讨论】:

    • 它是否记录在某处?在不修改每个 Dockerfile 的情况下使用注册表镜像是不可能的。
    • 我认为它没有被明确记录,但它已经出现在问题跟踪器 here 和邮件列表中。
    • @JulioGuerra 您可以在镜像模式下设置注册表并将镜像告诉 docker。无需更改镜像名称即可从镜像中拉取镜像。
    【解决方案2】:

    映像名称应包含注册表主机的 FQDN。 所以如果你想FROM <some private image>你必须指定它为FROM registry_host:5000/foo/bar

    将来这将不是必需的,但不幸的是现在是。

    【讨论】:

    • 你说In the future this won't be a requirement。来源?
    • @starbeamrainbowlabs 这个答案最初是在 2015 年给出的。当时我认为这是“未来”的功能。我的回答中提到的在 FROM 中使用 ARG 的文档(至少)是在 2017 年添加的。github.com/docker/cli/commit/… 我没有深入挖掘。
    【解决方案3】:

    我在 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}
    ...
    

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 2020-04-27
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2022-06-23
      • 1970-01-01
      相关资源
      最近更新 更多