Docker卷中的Docker机密

时间:2019-05-20 15:47:51

标签: docker jenkins docker-compose docker-volume

我正在尝试设置基于Docker的Jenkins实例。本质上,我将jenkins/jenkins:lts图像作为容器运行,并挂载数据卷以保留Jenkins将创建的数据。

现在,我想做的就是与此Jenkins实例共享主机的ssh密钥。可能是由于我对Docker的了解有限,但是我的问题是我不知道如何将其他文件/目录挂载到我的卷上,Jenkins要求我将ssh密钥放在var/jenkins_home/.ssh中。

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

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

version: '3.1'

services:
  jenkins:
    restart: always
    build: ./jenkins
    environment:
      VIRTUAL_HOST: ${NGINX_VIRTUAL_HOST}
      VIRTUAL_PORT: 8080
      JAVA_OPTS: -Djenkins.install.runSetupWizard=false
      TZ: America/New_York
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - jenkins_data:/var/jenkins_home
    networks:
      - web
      - proxy
    healthcheck:
      test: ["CMD", "curl --fail http://${NGINX_VIRTUAL_HOST}/ || exit 1"]
      interval: 1m
      timeout: 10s
      retries: 3
    secrets:
      - host_ssh_key

volumes:
  jenkins_data:

networks:
  web:
    driver: bridge
  proxy:
    external:
      name: nginx-proxy

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

我的问题是:无论如何,我是否可以在我的数据量中得到这个秘密?

3 个答案:

答案 0 :(得分:0)

像给出的那样安装秘密并尝试。

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

答案 1 :(得分:0)

无法完成。机密仅适用于docker swarm; docker-compose无法使用机密。

this GitHub issue中的更多详细信息。

答案 2 :(得分:0)

我知道这是一个比较老的话题,但是包括我在内的很多人都陷入了困境,答案是不正确的。您确实可以在docker-compose中使用机密信息,而无需使用Swarm,只要它是本地计算机或机密文件已安装在主机上即可。并不是说这是安全的或可取的,只是说可以做到。博客的最佳解释之一是这种可能性;

Using Docker Secrets during Development

以下是用于将api密钥添加到Spring应用程序的docker组成文件的部分示例。然后可以在Docker容器内的/ run / secrets / captcha-api-key中找到该密钥。 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的简短但简洁的文章; The Difference Between Docker Compose And Docker Stack