Docker:从构建上下文外部向图像添加 rsa 键

标签 docker rsa dockerfile

所以我想在我的镜像中包含一个 rsa key ,这样我就可以在构建镜像时将一个 git repo 克隆到我的镜像中。但我真的不想将这个 key 保留在 docker build repo 中。有没有人对如何处理这个有很好的建议?从 docker 文档和其他各种线程看来,COPY 似乎没有办法。来自构建上下文之外的文件。除了以下我对使用不感兴趣的解决方案:

How to include files outside of Docker's build context?

有没有更好的解决方案?还是我必须将 key 保留在构建存储库中,或者从我要使用的 rsa key 的位置构建?

我想一种可能的方法是从构建 repo gitignore key ,并在我克隆它时将其放入,并在自述文件中记下它,以便其他开发人员也知道这样做。

--- 我的解决方案 ---

我认为对此没有“正确”的答案,但这是我采用的解决方案。

我创建了一个 linux 用户(某处)并为它生成了一个 key 。然后在 gitlab 上创建一个只有 repo 克隆权限的用户。我将 linux 用户的公钥添加到 gitlab 用户。然后对于构建,我创建 .ssh 文件夹并使用配置文件复制用户私钥。我只是将用户 key 存储在 docker build repo 中。

构建步骤:

RUN mkdir ~/.ssh
RUN touch ~/.ssh/known_hosts
RUN ssh-keyscan -t rsa gitlab_host > ~/.ssh/known_hosts
COPY ./ssh/config /root/.ssh
COPY ./ssh/id_rsa_app /root/.ssh
RUN chmod 600 /root/.ssh/id_rsa_app

ssh 配置文件:
Host gitlab-app
  HostName gitlab_host
  IdentityFile /root/.ssh/id_rsa_app
  IdentitiesOnly yes

现在 git clone 在构建内部工作。

最佳答案

使用 build argument 怎么样? ?在你的 Dockerfile 中做这样的事情:

ARG rsakey
RUN test -n "${rsakey}" && { \
      mkdir -p -m 700 /root/.ssh; \
      echo "${rsakey}" > /root/.ssh/id_rsa; \
      chmod 600 /root/.ssh/id_rsa; \
    } || :

然后,在构建镜像时,使用 --build-arg选项:
docker build -t sshtest --build-arg rsakey="$(cat /path/to/id_rsa)" .

这将在构建时将 key 注入(inject)到镜像中,而不需要它存在于您的构建上下文中。

关于Docker:从构建上下文外部向图像添加 rsa 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240024/

相关文章:

azure - 看不到 Azure 应用服务的 Docker 容器日志

docker - Ansible 任务超时最大长度

java - 如何将DSA证书转换为RSA证书?

docker - 在portainer中修改docker镜像

docker - 在Docker的A VOLUME中安装整个数据库(包括二进制文件)

docker - GitLab runner 在运行管道时无法解析主机

android - 在android和go之间使用RSA

javascript - 使 Javascript RSA 消息加密给出相同的结果

docker - 有没有办法对 Dockerfile 进行 lint?

python - 在 Dockerfile 中激活 python virtualenv