Python 来自私有github repo的pip安装包,docker中带有部署密钥

Python 来自私有github repo的pip安装包,docker中带有部署密钥,python,docker,github,ssh,pip,Python,Docker,Github,Ssh,Pip,我正在尝试构建一个Docker容器,它应该从requirements.txt文件安装一系列python包其中一个条目是托管在私有GitHub存储库中的python包。为了安装它,我创建了一对SSH密钥,并将公共密钥作为部署密钥添加到GitHub存储库中 但是,当我构建容器时,会出现以下错误: ERROR: Command errored out with exit status 128: git clone -q 'ssh://****@github.com:organization/my-pa

我正在尝试构建一个Docker容器,它应该从requirements.txt文件安装一系列python包其中一个条目是托管在私有GitHub存储库中的python包。为了安装它,我创建了一对SSH密钥,并将公共密钥作为部署密钥添加到GitHub存储库中

但是,当我构建容器时,会出现以下错误:

ERROR: Command errored out with exit status 128: git clone -q 'ssh://****@github.com:organization/my-package' /tmp/pip-install-e81w4wri/my-package Check the logs for full command output.
我试图通过使用
rungitclone更改docker文件的pip install命令来调试错误git@github.com:organization/my package.git
,它确实工作得很好

这个错误是什么意思?我如何解决它?我可以克隆它并用一个专用命令安装它,但如果可能的话,我希望将所有需求保存在一个地方。谢谢

这是我正在使用的Dockerfile:

FROM joyzoursky/python-chromedriver:3.7-alpine3.8 as base

FROM base as builder

RUN echo "http://dl-8.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
RUN apk --no-cache --update-cache add bash gcc gfortran build-base git wget freetype-dev libpng-dev openblas-dev openssh-client
RUN ln -s /usr/include/locale.h /usr/include/xlocale.h

# copy requirements
RUN mkdir /install
WORKDIR /install
COPY ./requirements.txt /var/www/requirements.txt

### GITHUB SSH KEY ###
COPY ./keys/deploy_key_private .
RUN mkdir /root/.ssh && mv deploy_key_private /root/.ssh/id_rsa
RUN eval $(ssh-agent) && \
    ssh-add /root/.ssh/id_rsa && \
    ssh-keyscan -H github.com >> /etc/ssh/ssh_known_hosts

RUN pip install --upgrade pip && pip install --prefix=/install -r /var/www/requirements.txt --log logs.txt

FROM base
COPY --from=builder /install /usr/local
# KEEP ON BUILDING THE CONTAINER
该包在
requirements.txt
中作为
git列出+ssh://git@github.com:organization/my-package@master#蛋=我的包

如果相关,以下是pip的回溯:

Exception information:
2020-07-30T11:56:55,329 Traceback (most recent call last):
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 216, in _main
2020-07-30T11:56:55,329     status = self.run(options, args)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/cli/req_command.py", line 182, in wrapper
2020-07-30T11:56:55,329     return func(self, options, args)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/commands/install.py", line 325, in run
2020-07-30T11:56:55,329     reqs, check_supported_wheels=not options.target_dir
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/resolution/legacy/resolver.py", line 183, in resolve
2020-07-30T11:56:55,329     discovered_reqs.extend(self._resolve_one(requirement_set, req))
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/resolution/legacy/resolver.py", line 388, in _resolve_one
2020-07-30T11:56:55,329     abstract_dist = self._get_abstract_dist_for(req_to_install)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/resolution/legacy/resolver.py", line 340, in _get_abstract_dist_for
2020-07-30T11:56:55,329     abstract_dist = self.preparer.prepare_linked_requirement(req)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/operations/prepare.py", line 469, in prepare_linked_requirement
2020-07-30T11:56:55,329     hashes=self._get_linked_req_hashes(req)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/operations/prepare.py", line 239, in unpack_url
2020-07-30T11:56:55,329     unpack_vcs_link(link, location)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/operations/prepare.py", line 99, in unpack_vcs_link
2020-07-30T11:56:55,329     vcs_backend.unpack(location, url=hide_url(link.url))
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/vcs/versioncontrol.py", line 733, in unpack
2020-07-30T11:56:55,329     self.obtain(location, url=url)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/vcs/versioncontrol.py", line 641, in obtain
2020-07-30T11:56:55,329     self.fetch_new(dest, url, rev_options)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/vcs/git.py", line 230, in fetch_new
2020-07-30T11:56:55,329     self.run_command(make_command('clone', '-q', url, dest))
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/vcs/versioncontrol.py", line 774, in run_command
2020-07-30T11:56:55,329     log_failed_cmd=log_failed_cmd)
2020-07-30T11:56:55,329   File "/usr/local/lib/python3.7/site-packages/pip/_internal/vcs/versioncontrol.py", line 166, in call_subprocess
2020-07-30T11:56:55,329     raise SubProcessError(exc_msg)
2020-07-30T11:56:55,329 pip._internal.exceptions.SubProcessError: Command errored out with exit status 128: git clone -q 'ssh://****@github.com:organization/my-package' /tmp/pip-install-e81w4wri/my-package Check the logs for full command output.

git@github.com:organization/my package.git
是有效的SSH URL。
ssh://git@github.com:organization/my package.git
不是。
ssh://git@github.com/organization/my package.git
将是

如图所示,您可以添加
GIT\u SSH\u COMMAND='SSH-v'pip install…
以查看到底发生了什么

您可能需要:

git config --global url."ssh://git@github.com/".insteadOf ssh://git@github.com:
报告必须使用
requirements.txt
中的以下行:

git+ssh://git@github.com/my-organization/my-repo-name@master#egg=my_package_dir

我对Alpine不太熟悉,但通常已知主机的密钥不会进入
/etc/ssh/ssh\u known\u hosts
,而是
~/.ssh/known\u hosts
。感谢您的评论,我尝试更改路径,但不幸的是它没有解决问题。我不一定要坚持阿尔卑斯山,你认为这个问题可以用不同的基础形象来解决吗?不确定,我不这么认为。这篇文章回答帮助吗?简而言之,尝试添加带有用户名和用户电子邮件的git配置。这确实是一个URL问题,在requirements.txt中更改它就解决了这个问题。谢谢@arabinelli你能告诉我url在requirements.txt文件中是如何构造的吗?这是requirements.txt上显示的一行(我必须替换敏感信息,因为它是一个私有包):
git+ssh://git@github.com/my-organization/my-repo-name@master#egg=my_package_dir
@Arabinell感谢您的反馈。我已将您的评论包含在答案中,以提高可视性。