docker 个卷中的 Docker 个秘密
Docker secrets within a docker volume
我正在尝试设置一个基于 Docker 的 Jenkins 实例。本质上,我 运行 将 jenkins/jenkins:lts
图像作为容器并装载数据卷以持久保存 Jenkins 将创建的数据。
现在,我想做的是与这个 Jenkins 实例共享主机的 ssh 密钥。这可能是由于我的 Docker 知识有限,但我的问题是我不知道如何将额外的 files/directories 挂载到我的卷中,而 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
我的问题是:无论如何我可以在我的数据量中得到这个秘密吗?
像给定的那样安装秘密并尝试。
secrets:
- source: host_ssh_key
target: /var/jenkins_home/.ssh/id_rsa
mode: 0600
做不到。 Secrets 仅适用于 docker swarm; docker-compose 无法使用机密。
this GitHub issue 中有更多详细信息。
我知道这是一个相当古老的话题,但包括我在内的很多人都被困在这个问题上,答案根本不是真的。如果 Swarm 是本地机器或 secrets 文件安装在主机上,您确实可以将 secrets 与 docker-compose 一起使用,而无需使用 Swarm。并不是说这是安全的或可取的,只是说它可以做到。这个博客是对这几种可能方式的最佳解释之一;
Using Docker Secrets during Development
下面是用于向 Spring 应用程序添加 api 密钥的 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 与 swarm 的简短而简明的文章; The Difference Between Docker Compose And Docker Stack
我正在尝试设置一个基于 Docker 的 Jenkins 实例。本质上,我 运行 将 jenkins/jenkins:lts
图像作为容器并装载数据卷以持久保存 Jenkins 将创建的数据。
现在,我想做的是与这个 Jenkins 实例共享主机的 ssh 密钥。这可能是由于我的 Docker 知识有限,但我的问题是我不知道如何将额外的 files/directories 挂载到我的卷中,而 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
我的问题是:无论如何我可以在我的数据量中得到这个秘密吗?
像给定的那样安装秘密并尝试。
secrets:
- source: host_ssh_key
target: /var/jenkins_home/.ssh/id_rsa
mode: 0600
做不到。 Secrets 仅适用于 docker swarm; docker-compose 无法使用机密。
this GitHub issue 中有更多详细信息。
我知道这是一个相当古老的话题,但包括我在内的很多人都被困在这个问题上,答案根本不是真的。如果 Swarm 是本地机器或 secrets 文件安装在主机上,您确实可以将 secrets 与 docker-compose 一起使用,而无需使用 Swarm。并不是说这是安全的或可取的,只是说它可以做到。这个博客是对这几种可能方式的最佳解释之一;
Using Docker Secrets during Development
下面是用于向 Spring 应用程序添加 api 密钥的 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 与 swarm 的简短而简明的文章; The Difference Between Docker Compose And Docker Stack