gpt4 book ai didi

git - 如何将 Docker 构建的上下文定义为本地分支之一上的特定提交?

转载 作者:行者123 更新时间:2023-12-05 00:54:22 26 4
gpt4 key购买 nike

我想使用引用本地存储库的提交哈希为 Docker 构建命令提供上下文。

涵盖 Docker 构建的文档指定了如何在远程存储库而不是本地存储库上引用分支或标记。 Reference

我尝试将 URL 替换为 file://引用本地 git 存储库的协议(protocol),但返回错误
docker build file:///home/username/repositories/hello-world
错误

unable to prepare context: path "file:///home/username/repositories/hello-world" not found



我想将本地 Git 存储库(特定的提交、标记或分支)作为 Docker 构建镜像的构建上下文。

我看过这个问题 Docker build specific local git branch但我宁愿不必克隆或 checkout 分支以从中构建。

最佳答案

我确认 file:// url 前缀未被 docker build 识别为 (Git) URL .

相关代码片段为that one :

validPrefixes = map[string][]string{
"url": {"http://", "https://"},

// The github.com/ prefix is a special case used to treat context-paths
// starting with `github.com` as a git URL if the given path does not
// exist locally. The "github.com/" prefix is kept for backward compatibility,
// and is a legacy feature.
//
// Going forward, no additional prefixes should be added, and users should
// be encouraged to use explicit URLs (https://github.com/user/repo.git) instead.
"git": {"git://", "github.com/", "git@"},

[…]

一方面, git clone支持 git clone /home/path/repo.gitgit clone file:///home/path/repo.git - 并且实际上两种语法之间的行为不同,因为前者意味着 --local flag (顺便说一句,我在这里使用措辞 repo.git 而不是 repo/.git ,因为为简单起见,我假设 repo.gitbare repo ,即没有 checkout 的工作目录)。

因此,您可能希望在 moby 上打开功能请求。支持 docker build file:///home/path/repo.git (这将触发 git clone file:///home/path/repo.git )这样我们甚至可以指定类似 docker build file:///home/path/repo.git#master:folder/subfolder 的内容.

另一方面,您已经可以通过依赖 "STDIN mode" of docker build 以有效的方式模拟此功能。 , 结合一些 Bash process substitution git archive (它不会修改 repo 本身,因此它应该满足您不检查分支的要求):
docker build -t image - < <(cd /home/path/repo.git && \
git archive --format=tar.gz master:folder/subfolder)

在这种情况下,请注意 Dockerfile将考虑的是 Git repo 的分支 master在路径下 folder/subfolder .

实际上,“重定向+进程替换” … < <(…)是不需要的,可以用一个简单的管道代替:
cd /home/path/repo.git && \
git archive --format=tar.gz master:folder/subfolder | docker build -t image -

(如果您的 :folder/subfolder 位于 repo 的根目录,您可以删除 Dockerfile 部分)

关于git - 如何将 Docker 构建的上下文定义为本地分支之一上的特定提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57389547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com