当前位置: 首页 > 知识库问答 >
问题:

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

燕志学
2023-03-14

我对docker构建有问题 命令,该命令在尝试从私有git克隆存储库时中断。错误消息显示我没有权限:

#17 4.712围棋:github。com/专用/project@v1.0.0:正在读取github。com/private/project/go。mod在v1.0.0版本中:git ls remote-q origin/go/pkg/mod/cache/vcs中/

我有所有我认为重要的观点

# 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 git@github.com: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 .

git克隆 失败,出现上述错误。

另外--rm=false也没有效果,因为导出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 ...

同样在文件中,mkdir600700600相同的区别。

所以我的问题是:我如何调试SSH问题,知道容器消失了,安装程序根本不想工作?

我在许多答案和文档中找到了很多信息,但它仍然不起作用,而且在失败时如何真正调试这样的设置也没有多少内容。

  • 在docker容器中使用SSH密钥
  • 是否可以在运行的容器中启动shell会话(没有ssh)
  • 使用远程代理转发时docker buildkit装载ssh
  • 使用Docker Compose将主机的SSH密钥注入Docker机器
  • 使用SSH访问内部版本中的私有数据
  • docker构建
$ 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

共有1个答案

蓬琦
2023-03-14

好的,我终于找到了一个可以显著帮助你的选择。默认的docker输出是整洁的,但它只提供一行彩色信息,除非发生错误(错误在最后打印),否则不会提供RUN命令中发生的任何细节。

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

docker build --progress=plain ...

整洁的输出将替换为一整套行,包括错误和标准输出。现在我可以添加以下内容:

RUN echo "Hello"

或测试,例如:

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

并获得完整输出。

中间图像

作为附带说明,我发现的一件事是--ssh默认需要访问您的ssh-agent套接字,并且默认情况下这受设备保护。我必须编辑设备文件并添加以下内容:

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

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

警告2:您希望运行以下命令,以便更改立即生效(或重新启动):

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

我还对/run/user/1000和/run/user/keyring文件夹进行了chmod。一旦我让事情真正起作用,我会尽量不让那些chmod改变。。。但我并没有抱着希望。

好的,我有事情要做!

下一个问题是密钥的名称必须是id\u rsa。这是因为docker创建了一个根用户,而该用户只有默认的键名。您可以创建一个。使用不同名称的ssh/config文件。但是,如果您与其他不使用没有此类名称的密钥的人一起工作,那么这可能会有问题。

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

 类似资料:
  • 问题内容: 我正在写一种加密会话密钥的方法。它需要这样做,以便可以通过已成功测试的其他程序解密密钥。解密程序无法更改。我受困的是使我的加密工作与解密例程保持一致。 首先让我给出解密例程。请记住,这不能改变: 这是我正在编写的加密例程。我生成base64编码的文本,但最终无法解密。值得注意的是,我已验证解密例程正确获取了加密例程的结果(两者之间没有握手问题)。 我真的被卡住了。任何帮助表示赞赏。谢谢

  • 我有一个PGP公钥加密的会话包,我想从中提取会话密钥,这样我就可以单独解密会话密钥。我正在使用BouncyCastle库,并像这样提取会话密钥: 其中session_key_enc.bin是二进制格式的加密会话密钥,private.pem是与我在GPG中用于加密数据的公钥相对应的私钥。在加密数据之前,我将RSA密钥对的公钥部分转换为PGP格式的密钥,并将其导入GPG。 当我运行OpenSSL命令时

  • 我创建了两个GitHub帐户。一个给我的工作用户,一个给我自己。我需要赶上一些工作,因此将我的工作存储库克隆到我的个人电脑上。为了在不输入我的用户名和密码的情况下完成简单的“git推源主”提交,我只是想将我家用电脑上的公钥添加到工作存储库中。但是Github给出了这个错误: 谷歌了一会儿后,我看到了这个链接,上面写着“要解决问题,请从另一个帐户或存储库中删除密钥并将其添加到您的帐户”。当然,还有一

  • 问题内容: 如何列出和导出密钥库中的私钥? 问题答案: 最初来自Example Depot的一部分代码,用于列出密钥存储区中的所有别名: 几个月前,在Sun论坛上讨论了私钥的导出问题,而u:turingcompleter提出了DumpPrivateKey类,以将其缝入您的应用程序。 注意:这使用Sun软件包,这是一件“坏事”。 如果您可以下载apache commons代码 ,则以下是无需警告即可

  • 因为我是加密概念的新手。我想做的是一个应用程序,它发送的数据是用AES对称技术加密的。另外,我还需要将我以前使用非对称RSA技术加密的密钥以加密格式发送到另一边。我已经完成了使用AES对称加密技术使用256位密钥的加密,现在我已经加密数据,密钥,和启动矢量(IV)在字节。当我试图解密时,我知道起始向量也需要得到准确的数据。 现在我的问题是 C#中的AES解密代码: 我在C#中的非对称代码

  • 更新:正如当前答案所建议的,我还给出了的输出: