如何调试因 github 密钥不可用而出错的“docker build ...”会话?

2023-11-29

我有一个问题docker build ...当尝试从私有 git 克隆存储库时该命令会中断。错误消息说我没有权限:

#17 4.712 转到:github.com/private/[电子邮件受保护]: 阅读github.com/private/project/go.mod在修订版 v1.0.0 中:git ls-remote -q origin in /go/pkg/mod/cache/vcs/<big-id>:退出状态 128:
#17 4.712[电子邮件受保护]:权限被拒绝(公钥)。
#17 4.712 致命:无法从远程存储库读取。
#17 4.712
#17 4.712 请确保您拥有正确的访问权限
#17 4.712 并且存储库存在。
------
执行器运行失败 [/bin/sh -c cd cmd/service/ && go build -o service]:退出代码:1

我认为重要的要点我都有

# syntax=docker/dockerfile:experimental
FROM golang:alpine AS build-env

RUN apk add build-base git openssh-client

RUN mkdir -p -m 700 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

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

...

然后我使用包含以下内容的命令运行构建--ssh

export DOCKER_BUILDKIT=1
docker build --rm=false --no-cache --ssh default --file ./Dockerfile \
       --build-arg GO_VERSION=1.16.3 --tag app:main .

The git clone ...失败并出现上述错误。

还有--rm=false没有影响,因为export DOCKER_BUILDKIT=1。所以我不知道如何调试这个。我看不到任何容器,它们一旦被破坏就会被摧毁docker命令返回...

我尝试改变--ssh, 万一:

# The following gives me a permission error (as I expected)
... --ssh default=/home/alexis/.ssh/id_rsa ...

# The following is, I think, what happens by default, same git error
# (I verified the socket is under /run/user/1000/keyring/ssh
# as defined in the variable)
... --ssh github=$SSH_AUTH_SOCK ...

另外,在该文件中,mkdir was 600. 700 or 600相同的差异。

所以我的问题是:在知道容器消失并且设置根本不想工作的情况下,如何调试 SSH 问题?

我在许多答案和文档中找到了很多信息,但它仍然不起作用,并且根本没有太多关于如何在失败时真正调试这样的设置。

  • 在 docker 容器内使用 SSH 密钥
  • 是否可以在正在运行的容器中启动 shell 会话(无需 ssh)
  • 使用远程代理转发时docker buildkit挂载ssh
  • 使用 Docker Compose 将主机的 SSH 密钥注入 Docker Machine
  • 使用 SSH 访问构建中的私有数据
  • 码头工人构建

$ docker version
Client:
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d28e
 Built:             Wed Aug  4 21:24:10 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Wed Aug  4 21:26:30 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

好吧,我终于找到了一个有很大帮助的选项。默认的 docker 输出是干净整洁,但它会为您提供一行彩色信息,并且不会提供 RUN 命令中发生的所有详细信息,除非发生错误(最后打印的错误)。

为了进行调试,您至少可以使用以下命令获取每个命令的输出:

docker build --progress=plain ...

整齐的输出将被替换为包括错误和标准输出的完整行集。现在我可以添加以下内容:

RUN echo "Hello"

或测试,例如:

RUN ssh -A -l git -v github.com

并获得完整的输出。

中间图像和容器仍然无处可见......但输出有很大帮助。

作为旁注,我发现的一件事是--ssh default需要访问您的 ssh-agent 套接字,默认情况下它受 apparmor 保护。我必须编辑 apparmor 文件并添加以下内容:

/run/user/1000/keyring/ssh rw,

警告 1:每当 docker 更新时,此行可能会消失。

警告 2:您需要运行以下命令以使更改立即生效(或重新启动):

sudo apparmor_parser -r /var/lib/snapd/apparmor/profiles/snap.docker.docker

我也做了一个chmod to the /run/user/1000 and /run/user/keyring文件夹。一旦我让事情真正发挥作用,我会尽量不让这些chmod变化……但我不抱希望。

好吧,我还有事要做!

下一个问题是密钥的名称必须是id_rsa。这是因为 docker 创建了一个 root 用户,并且该用户只有默认的键名称。您也许能够创建一个.ssh/config具有不同名称的文件。但如果您与其他不会使用没有此类名称的密钥的人一起工作,这可能会出现问题。

有关的更多详细信息Dockerfile和其他设置,请参阅在 Docker 中使用私有 gitlab 模块构建 Go 应用程序

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

如何调试因 github 密钥不可用而出错的“docker build ...”会话? 的相关文章

随机推荐

  • https url 中的用户名和密码

    考虑一下网址 https foo 电子邮件受保护 上例中的用户名 密码部分是否符合 URL 参数 的条件 如中所定义这个问题 当您将用户名和密码放在主机前面时 该数据不会以这种方式发送到服务器 相反 它会根据所使用的身份验证模式转换为请求标
  • 如何用 SPS 和 PPS 数据填充 AVCodecContext 的“extradata”字段?

    问题是这样的 当解码 H264 流时ffmpeg 我可以获得SPS和PPS的原始数据 但我不知道如何将它们填充到extradata现场AVCodecContext 没有extradata 我无法正确解码帧 每次我打电话avcodec dec
  • 解析lxml中的html正文片段

    我正在尝试解析 html 片段 h1 title h1 img src I use lxml html fromstring 这让我发疯 因为它不断剥夺我的片段的标签 gt lxml html fromstring h1 a h1 tag
  • 读取RIP寄存器给出下一条指令的地址? [复制]

    这个问题在这里已经有答案了 我尝试读取x86 64寄存器的值rip 这是什么objdump shows 4017ec 48 8d 35 00 00 00 00 lea 0x0 rip rsi 4017f3 41 89 d4 mov edx
  • 从“mapend”函数到“Monoid”实例的函数?

    我有一个数据结构 它是玫瑰树的一个特定子类 形成具有最大下界和最低上界函数的格 并且它支持两个完全合理的函数作为Monoid班级的mappend 有什么办法支持匿名吗MonoidHaskell 中的实例 这是我应该考虑使用 Template
  • 无法识别的选择器发送到 NSKeyedUnarchiver 实例

    无法弄清楚为什么会不断抛出此错误 NSCFString bytes unrecognized selector sent to instance 0xc3eb200 对于这段代码 void parser SBJsonStreamParser
  • 从 Excel 运行 SQL Server 过程

    我正在使用 SQL Server 2008 Enterprise 我在一个数据库中创建了一个过程 该过程由对不同数据库的多个查询组成 并显示最终的组合结果集 我尝试通过 Excel 执行它 因此结果将自动显示在 Excel 工作表中 但我收
  • ARKit模板Xcode项目主线程检查器日志控制台

    我刚刚启动了一个新的 Xcode ARKit 项目并在物理设备上运行它 但在控制台中我得到以下输出 Main Thread Checker UI API called on a background thread UIApplication
  • 在 Microsoft 依赖注入中获取开放式通用服务

    假设我们有以下服务 interface IService interface IService
  • 如何使用 BehaviourSubjects 在 Angular 组件之间共享 API 调用的数据?

    我目前正在构建一个 Angular 应用程序 在其中向 api 发出请求 并将响应映射到两个不同的数组 我可以在我的app components ts但我会根据我的需要制作新的组件 如何在组件之间共享数据以确保组件始终拥有最新数据 因为我还
  • Maven 中默认的生命周期是什么

    我正在尝试学习 Maven 并通过以下语句Maven 文档 共有三个内置的构建生命周期 默认 干净和站点 默认生命周期处理您的项目部署 干净的 生命周期处理项目清理 而站点生命周期处理 创建项目的站点文档 还有另一份声明说 默认 或构建 这
  • SWIFT - 领域数据库加密不起作用

    我正在尝试加密领域数据库中存储的数据 我跟着示例代码Realm 上提到的快速页面 我想加密数据而不是数据库文件 下面是我正在使用的代码 var error NSError nil let configuration Realm Config
  • Python的“超级”如何做正确的事情?

    我正在运行Python 2 5 所以这个问题可能不适用于Python 3 当您使用多重继承创建菱形类层次结构并创建最派生类的对象时 Python 会做正确的事情 TM 它调用最派生类的构造函数 然后调用从左到右列出的其父类 最后调用祖父类
  • javascript 没有给出计算机名称

    我正在尝试使用 JavaScript 获取客户端计算机名称 如下所示
  • 使用 Angular.js 从 Web 服务获取数据

    我尝试使用 Angular 从远程 WS 获取 Json 格式的数据 但遇到了一些麻烦 数据正确地来自网络服务 但我无法在控制器内使用它 这是为什么 角度代码 var booksJson var app angular module boo
  • 使用 ZipFile 类从多个文件的 zip 存档中解压缩文件

    我想使用ZipFile类 使用文件名从多个文件的存档中解压缩文件 如何获取 zip 文件名和目录的字符串以传递给ZipFile构造函数 您可以使用 AssetManager 和 ZipInputStreamhttp developer an
  • 在页面加载时重置

    如何在页面加载时重置 使用 JSF 或 CommandButton 的 onClick 事件 请在此处发布 Javascript 或 Ajax 示例 请有人帮助我解决这个问题 JSF 代码在这里
  • React componentDidMount 获取 api

    我正在尝试获取 componentDidMount 内的 api api 结果将设置为组件的状态 并将状态映射并传递给子组件 如果我使用获取 api里面的fetch方法componentDidMount 一切正常 componentDidM
  • 出于安全原因,curl_init() 已被禁用

    url http api stackoverflow com 1 1 search tagged php ch curl init curl setopt ch CURLOPT URL url curl setopt ch CURLOPT
  • 如何调试因 github 密钥不可用而出错的“docker build ...”会话?

    我有一个问题docker build 当尝试从私有 git 克隆存储库时该命令会中断 错误消息说我没有权限 17 4 712 转到 github com private 电子邮件受保护 阅读github com private projec