如何通过Docker secrets共享SSH密钥以访问私有Github仓库?

7
我将使用来自这篇帖子的建议来实现Docker secrets,以便我可以使用本地SSH密钥来为我的容器授权访问Github。我在MacOS上且不使用Docker swarm。以下是我的设置: docker-compose.yml
version: '3.1'

services:
  [servicename]:
    secrets:
     - ssh_private_key

[...]

secrets:
  ssh_private_key:
    file: ~/.ssh/id_rsa

Dockerfile

FROM python:3.7 as intermediate

RUN mkdir /root/.ssh/ 
RUN ln -s /run/secrets/ssh_private_key /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./

RUN pip install --no-cache-dir -r requirements_private_repos.txt

当我尝试运行 docker-compose build 并使用 SSH 密钥从私有远程仓库拉取时,我会遇到以下错误:
Permission denied (publickey).
fatal: Could not read from remote repository.

我可以远程登录到Docker镜像,并看到密钥已经被创建并且在/run/secrets/ssh_private_key中填充。

如果在Dockerfile中使用,为什么链接无法工作?如果docker secrets不是正确的方法,是否有更好的方法可以将SSH密钥从MacOS共享到Docker中?

1个回答

7

您不能在构建阶段使用运行时机密信息。您可以使用多阶段构建将秘密信息复制到镜像中,以便在下一阶段被丢弃,或者使用在 Docker 18.09 中引入的新的构建时间秘密信息。

对于多阶段方法,您可以执行以下操作:

FROM python:3.7 as intermediate

COPY id_rsa /root/.ssh/id_rsa # your private key must be on the build context
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./

RUN pip install --no-cache-dir -r requirements_private_repos.txt

FROM python:3.7

COPY --from=intermediate XXXX YYYY # copy your modules, this image won't have the ssh private key

对于这种新方法,你可以尝试以下步骤。但我自己还没有尝试过(需要在主机上运行ssh-agent):

FROM python:3.7 as intermediate

RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./

RUN --mount=type=ssh pip install --no-cache-dir -r requirements_private_repos.txt

然后使用以下命令构建您的镜像:

docker build --ssh default . -t myimage

查阅文档以了解新方法的更多信息:

https://docs.docker.com/develop/develop-images/build_enhancements/#new-docker-build-secret-information


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接