gpt4 book ai didi

security - 访问构建 Dockerfile 所需的 secret /私有(private)文件?

转载 作者:行者123 更新时间:2023-12-04 21:15:06 25 4
gpt4 key购买 nike

我正在尝试在 Docker 中构建一个图像,该图像需要一些 secret 文件来执行诸如从私有(private) git 存储库中提取之类的操作。我见过很多人写这样的代码:

ADD id_rsa /root/.ssh/id_rsa
RUN chmod 700 /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
RUN git clone git@github.com:some/repo.git /usr/local/some_folder

虽然这样可行,但这意味着我必须将我的私有(private) id_rsa 与我的图像一起存储,这让我觉得这是个坏主意。我更愿意做的是将我的 secret 文件保存在像 s3 这样的云存储中,然后将凭据作为环境变量传递,以便能够将其他所有内容都拉下来。

我知道我可以在 docker run 处传递环境变量与 -e切换,但是如果我在构建时需要一些文件(比如 id_rsa 来执行 git 克隆),我该怎么办?理想情况下,我可以将环境变量传递给 docker build ,但这是不可能的(我不明白为什么)。

那么,想法?在这里做的规范/正确的事情是什么?我不能成为第一个遇到这个问题的人。

最佳答案

我将从最简单的部分开始,我认为这是一个常见的误解:

Ideally I'd be able to pass environment variables to docker build, but that's not possible (I can't understand why).



一个 docker 构建意味着是可重现的。给定相同的上下文(与 Dockerfile 位于同一目录下的文件),生成的图像是相同的。它们也很简单。这两件事一起解释了没有环境选项或其他条件。

现在,因为构建需要可重现,所以每个命令的执行都会被缓存。如果您运行构建两次, git pull只会第一次运行。

根据您的评论,这不是您想要的:

so on any new image build, we always want the newest version of the repo



要触发新构建,您需要更改上下文或 Dockerfile .

规范的方式(我可能在滥用这个词,但这就是 automated builds 的工作方式)是包含 Dockerfile在混帐中。

这允许 git pull ; docker build ... 的简单工作流程并避免存储 git 凭据的问题。

关于security - 访问构建 Dockerfile 所需的 secret /私有(private)文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25697813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com