如何在Docker构建中pip安装具有私有子模块的私有存储库?

时间:2018-12-14 14:24:40

标签: docker pip git-submodules

我正在构建一个项目,该项目需要对私有python存储库的某些依赖。此仓库内部有一个子模块,该子模块还指向私有仓库。我可以使用ssh密钥在机器上获取它,这在容器内部并不方便。

在我的dockerfile中,我阻止了此步骤:

RUN pip3 install wheel \
  && pip3 wheel git+https://${GITHUB_TOKEN}@github.com/owner/repo.git@master \
--wheel-dir=/svc/wheels

它可以毫无问题地获取存储库,但不能处理子模块。我猜pip解析了URL,并且没有通过最初传输的令牌。

我真的不知道如何解决该问题。我可以在本地存放该文件夹并复制它,或者设置一个在构建期间要访问的私有pip存储库(如果可能),或者在容器内使用ssh键(听起来像是对我来说很糟糕的方法)。

是否有任何“标准方法”?如果没有,您会提出什么建议?

EDIT1:这似乎是一个git问题,因为git clone --recursive都不起作用

回答:我首先需要按照建议使用netrc,并在我的子模块声明中发现了一个问题。它是使用ssh设置的。 url = git@github.com:代替url = https://github.com/。感谢您花费时间和精力进行测试。我会接受larsks的回答,因为他指导我这么做了

2 个答案:

答案 0 :(得分:1)

您应该能够将其配置为${GITHUB_TOKEN)文件,而不是像在命令行中那样通过.netrc进行配置。 in this answer

您的Dockerfile将包含以下内容:

RUN echo machine github.com login ${GITHUB_TOKEN} > ~/.netrc
RUN pip3 install wheel \
  && pip3 wheel git+https://github.com/owner/repo.git@master \
--wheel-dir=/svc/wheels

答案 1 :(得分:0)

=ArrayFormula(Magento!A2:A)之前的dockerfile中使用以下命令

RUN pip install ...

这将用RUN git config --global url."https://${GITHUB_TOKEN}@github".insteadOf https://github 替换https://github的出现,即使在执行https://${GITHUB_TOKEN}@github命令时在子模块级别。

注意:在父存储库中,子模块url(在git中定义)应设置为.gitmodules,而不是https://github