如何pip安装在docker build中具有私有子模块的私有存储库?

如何pip安装在docker build中具有私有子模块的私有存储库?,docker,pip,git-submodules,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 它可以

我正在构建一个需要依赖于私有python存储库的项目。该回购协议包含一个子模块,该子模块也指向私有回购协议。我可以使用ssh密钥在我的机器上获取它,这在容器中是不方便的

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

RUN pip3 install wheel \
  && pip3 wheel git+https://${GITHUB_TOKEN}@github.com/owner/repo.git@master \
--wheel-dir=/svc/wheels
它可以毫无问题地获取repo,但无法处理子模块。我猜pip解析URL,不会传递最初传输的令牌

我真的不知道如何解决这个问题。我可以在本地复制文件夹,或者设置一个私有的pip repo,如果可能的话,我可以在构建时访问它,或者在容器中使用ssh密钥,这对我来说是一种糟糕的方法

有没有标准的方法?如果不是,你有什么建议

EDIT1:这似乎是git的问题,因为git clone-recursive也不起作用

如果不在命令行上传递${GITHUB_令牌,您应该能够将其配置到.netrc文件中,如所述,例如

您的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

在运行pip安装之前,在dockerfile中使用以下命令

这将替换https://github 使用https://${GITHUB_TOKEN}@GITHUB,即使在执行git命令时在子模块级别也是如此


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

我不知道这个特性,谢谢你的建议。尽管如此,它仍然会给出与私有子模块insideOdd相同的结果,它在我的测试中运行良好,尽管我直接使用git而不是pip b因为我可以访问有限数量的私有github存储库,并且没有一个存储Python模块。主存储库的git克隆成功了吗?我刚刚在子模块声明中发现了问题。它是使用ssh设置的。url=git@github.com:改为url=https://github.com/. 谢谢你花时间和精力我喜欢它。
RUN git config --global url."https://${GITHUB_TOKEN}@github".insteadOf https://github