使用 SSH 从 BitBucket pip 安装自定义包,无需在 Docker 构建期间输入 SSH 密码

2024-04-16

我正在尝试 pip 安装(通过conda env create命令)来自 BitBucket 的自定义 python 包docker build命令,无需输入 SSH 密码/密码。这个问题类似于这另一个问题 https://stackoverflow.com/questions/70027258/pip-install-custom-package-from-bitbucket-with-ssh-without-entering-ssh-password,但有所不同,因为错误发生在docker build命令。

的environment.yml文件conda env create命令(期间docker build)看起来像这样:

name: my_app
channels:
  - defaults
dependencies:
  - pip=21.2.2
  - python=3.8.11
  - pip:
    - git+ssh://[email protected] /cdn-cgi/l/email-protection/my_org/my_package_repo.git
    - pandas==1.2.5
    - python-dotenv==0.19.0
    - xlrd==2.0.1
prefix: /usr/local/anaconda3/envs/my_app

当。。。的时候docker build正在尝试在 Docker 映像内构建 conda 环境,我收到此错误:

Installing pip dependencies: ...working... Pip subprocess error:
  Running command git clone -q 'ssh://****@bitbucket.org/my_org/my_package_repo.git' /tmp/pip-req-build-3t5mkmnw
  Host key verification failed.
  fatal: Could not read from remote repository.

  Please make sure you have the correct access rights
  and the repository exists.
WARNING: Discarding git+ssh://****@bitbucket.org/my_org/my_package_repo.git. Command errored out with exit status 128: git clone -q 'ssh://****@bitbucket.org/my_org/my_package_repo.git' /tmp/pip-req-build-3t5mkmnw Check the logs for full command output.
ERROR: Command errored out with exit status 128: git clone -q 'ssh://****@bitbucket.org/my_org/my_package_repo.git' /tmp/pip-req-build-3t5mkmnw Check the logs for full command output.

Ran pip subprocess with arguments:
['/opt/conda/envs/work_content/bin/python', '-m', 'pip', 'install', '-U', '-r', '/tmp/condaenv.9p_rq9_h.requirements.txt']
Pip subprocess output:
Collecting git+ssh://****@bitbucket.org/my_org/my_package_repo.git (from -r /tmp/condaenv.9p_rq9_h.requirements.txt (line 3))
  Cloning ssh://****@bitbucket.org/my_org/my_package_repo.git to ./pip-req-build-3t5mkmnw

failed

CondaEnvException: Pip failed

当我在终端中并遵循中的答案时,此远程/自定义包安装成功参考StackOverflow问题 https://stackoverflow.com/questions/70027258/pip-install-custom-package-from-bitbucket-with-ssh-without-entering-ssh-password。但是,当我在运行之前尝试同样的事情时docker build命令,我收到上面的错误。我假设这是因为 Docker 正在构建一个全新的操作系统映像,并且它不再具有我在终端中提供的 SSH RSA 密码。在构建过程中不提供密码的情况下如何解决此错误?

Update

根据当前答案之一的建议,我修改了我的Dockerfile看起来像这样:

# syntax=docker/dockerfile:experimental
FROM continuumio/miniconda3:4.10.3
...
RUN apt-get install -y openssh-client git
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts
RUN --mount=type=ssh git clone gi[email protected] /cdn-cgi/l/email-protection:my_org/my_package_repo.git /tmp/my_package_repo

The --mount命令在以下位置创建存储库的本地副本/tmp目录。所以现在conda环境.yml文件需要更改为pip install从该本地目录,如下所示:

name: my_app
channels:
  - defaults
dependencies:
  - pip=21.2.2
  - python=3.8.11
  - pip:
    - /tmp/my_package_repo
    - pandas==1.2.5
    - python-dotenv==0.19.0
    - xlrd==2.0.1
prefix: /usr/local/anaconda3/envs/my_app

...我正在运行docker build使用如下命令进行处理:

eval $(ssh-agent); ssh-add ~/.ssh/id_rsa
DOCKER_BUILDKIT=1 docker build --ssh default .

The eval上面的命令是在 Docker 构建开始之前手动输入我的 SSH 密码。这DOCKER_BUILDKIT=1在......面前docker build命令强制 Docker 使用 Docker Buildkit 进行构建,这是RUN --mount=type=ssh git cloneDockerfile 中的命令。这个解决方案现在对我有用。这并不完全是下面答案中的内容,所以我想我应该与社区分享。我会将指向我这个方向的答案标记为正确答案。


SSH 需要访问您的 RSA 私钥才能进行身份验证。您的私钥不会与 Docker 映像内运行的任何命令共享。 Docker 有一个内置功能可以解决这个问题,该功能已记录在案here https://docs.docker.com/develop/develop-images/build_enhancements/#using-ssh-to-access-private-data-in-builds.

本质上你想做的就是下载你的PUBLICDocker 镜像的关键:

# Download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

使用类型定义安装ssh为了让 Docker 引擎转发 SSH 代理连接。

RUN --mount=type=ssh git clone [email protected] /cdn-cgi/l/email-protection:myorg/myproject.git myproject

此运行命令可以是其他命令,例如安装 Python 包的命令。

您可以使用以下命令构建 docker 镜像-ssh option:

docker build --ssh default .
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SSH 从 BitBucket pip 安装自定义包,无需在 Docker 构建期间输入 SSH 密码 的相关文章

  • Django ModelForm 不保存数据

    我已经尝试过以下帖子中的解决方案 从 ModelForm 保存数据 https stackoverflow com questions 13046488 saving data from modelform 没起作用 ModelForm数据
  • 运行 py.test 时出现错误 ImportMismatchError

    当我在本地运行测试时 它工作正常 但是在创建 docker 并在容器内运行后 我收到以下错误 usr local lib python3 5 site packages pytest config py 325 in getconftest
  • 网络抓取未知数据结构(JSON、嵌套列表或其他什么?)

    我构建了一个网络抓取工具this https campus datacamp com courses intro to python for data science chapter 1 python basics该页面取决于将字符串解析为
  • 如何将 datetime64 数组转换为 int?

    有了这个 pd Timestamp 31 12 1999 23 59 12 value gt gt 946684752000000000 我可以获得日期时间基本值的整数值 如何对日期时间值数组完成此操作 df pd DataFrame a
  • 在不同的 PC 之间传输 Python 设置

    我的情况是我有两台笔记本电脑fresh installation of windows 现在我用它们来编程 所以 假设我在一台笔记本电脑上安装了各种 python 模块 包 那么我有什么办法可以clone我的另一台笔记本电脑上的完整 pyt
  • Numpy:导入错误:无法导入名称测试用例

    我安装了 numpy sudo apt get install numpy 然后在 python2 7 中导入 numpy import numpy 我收到这个错误 Traceback most recent call last File
  • Python Popen grep

    我希望 Popen 执行 grep i line buffered grave data txt 当从 shell 运行时 这给了我想要的结果 如果我开始 在我测试的同一目录中grep 一个 python repl 并遵循文档中的说明 ht
  • 在鼻子测试中打印不同的长描述以及测试名称 python

    我正在使用命令 nosetests test py 运行时仅打印描述的第一行 我想要完整的描述以及测试名称 我怎么做 测试 py 文件 import unittests class TestClass unittest TestCase d
  • 无法将调试器从 Visual Studio 2019 连接到本地 docker Linux 容器

    因此 我在本地计算机上使用 docker compose 在 docker 容器上运行了简单的 hello world net core 应用程序设置 问题是当我尝试使用 Debug gt Attach to Process gt Conn
  • 如何设置matplotlib中轴的单位长度?

    例如x 1 180 000 当我绘制它时 在 x 轴上显示 1 20 000 40 000 180 000 这些0真的很烦人 如何将x轴的单位长度更改为1000 以便显示 1 20 40 180 并且还表明某处其单位为 1000 我知道我自
  • python 求数组中正数之和的函数

    我需要编写一个函数 它接受一个数字数组并找到所有数字的最大和 换句话说 我需要找到正数的总和 我写了这个 我收到 列表超出范围 想法 def maximum sub A x 0 i 0 for i in A while A i gt 0 x
  • 数据类的子类,带有一些断言

    我有一个冻结的数据类MyData保存数据 我想要一个杰出的子类MySpecialData只能保存长度为1的数据 这是一个有效的实现 from dataclasses import dataclass field dataclass froz
  • pip install 找不到包,但 pip search 找到

    我想安装hdbcli https pypi org project hdbcli 包 SAP HANA 连接器 当我搜索时pip正在找到该包 但是当我想安装它时 pip找不到包裹 指定当前包也不会产生任何结果 pip install hdb
  • 定制 odoo 中的会计和财务模块?

    我正在研究会计和财务模块 我想做一些修改 例如隐藏字段和隐藏税收图表 有人能帮我吗 请告诉我隐藏左侧菜单项 税表 的程序 我也想知道view id隐藏发票表中的税费和底部税费 更新 请让我知道隐藏它们的外部 ID 我无法找到它们 因为它们链
  • 了解 django admin readonly_fields

    我创建了一些代码来区分 Django admin 中的两个用户组 从而导致显示所有字段为只读或仅显示其中的一些字段 这些字段直接在 ModelAdmin 类中设置 首先这是代码 class PersonAdmin admin ModelAd
  • 每个 start_url 已抓取多少个项目

    我使用 scrapy 抓取 1000 个 url 并将抓取的项目存储在 mongodb 中 我想知道每个网址找到了多少个项目 从 scrapy 统计数据我可以看到 item scraped count 3500但是 我需要分别对每个 sta
  • Python setuptools:打包根目录(每个包不需要子目录)

    我需要将一个包写入存储库 但它是一个小型快速包 因此我认为不需要将文件放入子目录中 我只是想要 import mypkg module1 具有目录结构 root folder setup py init py the init for pa
  • ImageDataGenerator 预测类 - 为什么预测未正确从概率转换为预测类?

    我有一个这样设置的目录 images val class1 class2 test all classes train class1 class2 每个目录中都有一组图像 我想预测测试中的每个图像是否属于 1 类或 2 类 我写这个是为了读
  • 使用 django-import-export 通过 url 将外键 id 传递到导入的 csv 文件

    我尝试使用 django import export 和外键 位置 将一些数据从 csv 文件导入到 django 数据库 我想要实现的是 location id 由请求网址传递 value datetime location 4 46 2
  • 如何阻止诱变剂自动更新 ID3 版本?

    当我尝试在 MP3 中嵌入专辑封面时 诱变剂将 ID3 标签更新为版本 2 4 我不希望这样做 因为在 ID3v2 4 中 我的手机 运行 Windows Phone 8 和我的计算机无法识别标签 显然 只需更改mutagen id3 ve

随机推荐