如何安全地git clone / pip将私有存储库安装到我的docker镜像中?

问题描述 投票:1回答:1

我有一个私人仓库,其中包含我想要pip install的软件包。我花了很多时间阅读各种论坛和文章,关于安全地做到这一点的不同方法。关于如何最好地做到这一点似乎没有达成共识(如果可能的话)。我显然不想在我的dockerfile中暴露任何ssh密钥/秘密 - 我想小心通过docker history使它们可用。

git ssh-keys docker-image
1个回答
0
投票

正如“Securely build small python docker image from private git repos”中所述,您需要使用Docker 18.09+

  • --ssh 您可以使用--ssh标志将现有SSH代理密钥转发到构建器。 docker只会通知构建器此类功能可用,而不是传输密钥数据。 现在,当构建器需要通过SSH访问远程服务器时,它将回拨给客户端并要求它签署此连接所需的特定请求。 密钥本身永远不会离开客户端,并且一旦请求访问的命令完成,构建器端就没有信息可以在以后重新建立远程连接。
  • 秘密: 在/var/run/secrets构建期间提供挂载选项,仅适用于使用它的命令,并且不包含在创建的层中。

那是:

docker build --ssh github_ssh_key=/path/to/.ssh/git_ssh_id_rsa .

只有代理连接与该命令共享,而不是私钥的实际内容。 Dockerfile中没有其他命令/步骤可以访问它。

Dockerfile在多级第一步中会给出一个关键名称github_ssh_key,以便我们在调用docker build时可以使用它:

RUN --mount=type=ssh,id=github_ssh_key pip wheel \
    --no-cache \
    --requirement requirements.txt \
--wheel-dir=/app/wheels

OP Jesus Garcia确实报告(在评论中)使它工作:

我不得不使用2个单独的RUN命令。

我不确定这是否是这个新功能的限制,或者我试图在我的RUN中将多个命令串在一起的方式但是当我添加它作为other commands && /bin/sh -c "mount=type=ssh,id=github_ssh_key pip install private-repo" vs RUN --mount=type=ssh,id=github_ssh_key pip install private-repo && more commands ...时我一直得到一个publickey权限被拒绝错误

© www.soinside.com 2019 - 2024. All rights reserved.