Docker卷中的Docker机密

Docker卷中的Docker机密,docker,jenkins,docker-compose,docker-volume,Docker,Jenkins,Docker Compose,Docker Volume,我正在尝试设置一个基于Docker的Jenkins实例。基本上,我将jenkins/jenkins:lts映像作为一个容器运行,并装载一个数据卷来保存jenkins将创建的数据 现在,我想做的是与这个Jenkins实例共享主机的ssh密钥。这可能是由于我的Docker知识有限,但我的问题是我不知道如何将其他文件/目录装载到我的卷中,Jenkins要求我将ssh密钥放在var/Jenkins\u home/.ssh中 我天真地尝试在Dockerfile中创建目录,然后用docker compose

我正在尝试设置一个基于Docker的Jenkins实例。基本上,我将
jenkins/jenkins:lts
映像作为一个容器运行,并装载一个数据卷来保存jenkins将创建的数据

现在,我想做的是与这个Jenkins实例共享主机的ssh密钥。这可能是由于我的Docker知识有限,但我的问题是我不知道如何将其他文件/目录装载到我的卷中,Jenkins要求我将ssh密钥放在
var/Jenkins\u home/.ssh

我天真地尝试在Dockerfile中创建目录,然后用docker compose挂载它们。正如您所料,它失败了,因为该卷包含Jenkins的主目录数据,而不是Jenkins容器本身

我有以下
docker compose.yml
(由于上述原因,无法工作):


我的问题是:在我的数据卷中是否有任何方法可以获取此机密?

像给定的那样装载机密,然后重试

 secrets:
  - source: host_ssh_key
    target: /var/jenkins_home/.ssh/id_rsa
    mode:   0600

这是办不到的。秘密只对docker swarm有效;docker compose无法使用机密


更多详细信息请参见。

我知道这是一条相当古老的线索,但包括我在内的许多人都被这条线索卡住了,答案根本不是真的。您确实可以使用docker compose的机密,而无需使用Swarm,前提是它是本地机器或机密文件装载在主机上。不是说这是安全的或可取的,只是说这是可以做到的。对这几种可能的方式最好的解释之一就是这个博客

下面是docker compose文件的一个部分示例,用于向Spring应用程序添加api密钥。该密钥随后在Docker容器内的/run/secrets/captcha api密钥处可用。Docker通过将文件绑定为挂载来“伪造”它,然后可以以任何方式访问挂载。它不安全,因为文件仍然存在,所有人都可以访问/run/secrets,但作为一种解决方法,它是绝对可行的。非常适合开发服务器,但不会在生产中使用

version: '3.6'
services:
  myapp:
    image: mmyapp
    restart: always
    secrets:
      - captcha-api-key

secrets:
  captcha-api-key:
    file: ./captcha_api_key.txt
编辑:除此之外,你可以简单地运行一个节点群,只需稍微增加一点资源,并按预期方式使用机密。如果已经构建了映像,“docker stack deploy mydocker-composefile.yml mystackname”将执行与旧docker compose相同的操作。但是请注意,yml文件必须使用3或更高的规范编写


下面是一篇关于compose vs swarm的简短而简洁的评论

不起作用。更多详细信息请参见:。简言之,似乎只有docker swarm才能正确使用docker compose。如果你问我有点傻。。。哦,好吧。
version: '3.6'
services:
  myapp:
    image: mmyapp
    restart: always
    secrets:
      - captcha-api-key

secrets:
  captcha-api-key:
    file: ./captcha_api_key.txt