我正在尝试设置基于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
我的问题是:无论如何,我是否可以在我的数据量中得到这个秘密?
答案 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