使用docker-compose从文件中向Dockerfile传递参数(SSH私钥)

4

你好!

我在使用docker-compose时遇到了问题,因为我需要将我的私有SSH密钥传递给Dockerfile,如下所示:

docker-compose.yml

version: '3.7'
services:
  worker:
    build: .
    args:
      - SSH_PRIVATE_KEY

Dockerfile

ARG SSH_PRIVATE_KEY
RUN mkdir /root/.ssh/  && \
    echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa

使用 Docker 来实现这个操作非常简单,只需要执行以下命令即可:

docker build . --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)"

但在docker-compose中......如另一个问题所描述的,ARGS配置的问题在于我不能将私钥放入docker-compose.yml文件中。

我需要让docker-compose可以访问~/.ssh/id_rsa内的密钥:有什么提示可以执行吗?

谢谢!


1
请记住,如果您这样做,任何拥有该镜像的人都可以轻松提取私钥(在这种情况下,无论是通过docker run运行镜像还是查看其docker history)。我建议将您的ssh密钥和Dockerfile分开,并且如果您需要检出源代码库,请在运行任何Docker操作之前在主机上执行此操作。 - David Maze
@DavidMaze 如果密钥在构建阶段提供的变量中,它就不应该存储在镜像中,对吧?这就是为什么我不想将私钥直接添加到 Dockerfile 中,而是作为参数提供。 - toshiro92
1个回答

5
关于args的文档中指出:

在指定构建参数时,您可以省略值,在这种情况下,构建时的值是Compose运行环境中的值。

在您的情况下,您可能想使用以下命令构建worker服务:
SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)" docker-compose build

顺便提一下,你的docker-compose.yml有误(缺少context),应该是:

version: '3.7'
services:
  worker:
    build:
      context: .
      args:
        - SSH_PRIVATE_KEY

谢谢,现在它可以用了!你说得对,我忘记在那个例子中添加上下文了 :-) - toshiro92

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