gpt4 book ai didi

git - 如何制作一个指向 git repo 的 requirements.txt,但如果它存在则使用包的本地版本?

转载 作者:行者123 更新时间:2023-12-02 20:07:54 25 4
gpt4 key购买 nike

我有一个 requirements.txt它指的是托管在内部 gitlab 服务器上的包(例如,git+ssh://git@srv/pkgs/mypkg.git@v1#egg=mypkg)。 pip i -r requirements.txt当我进行开发构建时工作,因为 gitlab 服务器有我的凭据。当我运行 pip i -r requirements.txt在我的 docker 镜像中,它失败了,因为 git 无法通过服务器进行身份验证。理想情况下,我不希望 docker 镜像存储任何 ssh key 。

我试图通过一个“pre-docker”make 目标来解决这个问题,它将运行 pip download -r requirements.txt . Dockerfile 将指示 docker 将所有包复制到容器中,然后容器将执行 pip i--find-links=file:///app/pip-cache (/app/pip-cache 是我存储容器本地化包的地方)。这似乎不起作用;看起来 pip 不考虑 --find-links当它从 获取时远程 git 存储库 ,因此即使包在 /app/pip-cache 中,尝试向远程服务器进行身份验证时仍然失败.

我假设 pip不知道 /app/pip-cache 中的包与我从 gitlab 服务器请求的包相同。 (?)

有什么方法可以提示pip里面 requirements.txtgit+ssh://包也可以在本地找到?否则,是否有另一种更合适的解决方案来解决这个问题?

最佳答案

在 Docker 镜像中克隆私有(private) git 存储库的最常见方法是使用 ssh key 。您可以使用 ssh key 在存储库上启用 ssh 克隆。然后,您将这个 ssh key 复制到图像中,然后
使用 ssh 克隆存储库。

这种方法的问题是 key 将成为图像的一部分,如果您共享图像,任何人都可以从图像层中检索您的 ssh key (即使您在完成后删除了 key )。
这个问题有多种解决方案。一种选择是使用 --squash docker build 选项,将 docker 层压缩为单层。这将避免从构建层泄漏 ssh key 。

另一种更好的方法是使用 Docker multi-stage builds .您基本上使用 ssh 或用户名/通过身份验证将代码 pull 入第一个图像。然后将代码复制到基础镜像中。这里的好处是
克隆过程不是生成图像的一部分,因此分泌物不会随 Docker 图像泄漏。

关于git - 如何制作一个指向 git repo 的 requirements.txt,但如果它存在则使用包的本地版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48526423/

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