我有一个项目与docker-compose.yml
version: '3'
services:
backend:
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- ./backend:/app
secrets:
- mysecretkey
ports:
- "5000:5000"
secrets:
mysecretkey:
file: ../data/thesecretjwtkey.txt
字符串
我想使用Jenkins自动化部署。由于我的Jenkins代理没有安装docker-compose
或docker compose
,并且因为我不想只将docker-compose
独立二进制文件 curl 到我的Jenkins代理中,所以我决定使用Docker in Docker方法。
我在Jenkins代理中做的事情:
1.我拉了一个包含docker compose
插件的docker镜像
1.我在docker容器中克隆了我的项目源代码
1.我在docker容器中运行一个python脚本,创建data/thesecretjwtkey.txt
和chmod 777 -R data/
1.我更改了容器环境变量中的DOCKET_HOST
,以将Docker套接字链接到主机套接字
1.运行docker compose
Docker运行,构建工作,但我一直得到这个错误:
Error response from daemon: invalid mount config for type "bind": bind source path does not exist: MYPATH_IN_DOCKER_CONTAINER/data/thesecretjwtkey.txt
型
然而,当我去我的Docker容器MYPATH_IN_DOCKER_CONTAINER/data/thesecretjwtkey.txt
在这里...
编辑:
我的Jenkinsfile
的简化版本
node {
def image = docker.image('my-custom-image')
image.inside("--user=root -e DOCKER_HOST=${env.DOCKER_HOST}") {
stage('clone') {
checkout scm
}
stage('Deploy') {
sh "python3 -u deployscripts/deploy.py"
}
}
}
型
在我的deploy.py
中,我有这样的东西
generate_secret(secret_path="data/thesecretjwtkey.txt")
os.system("docker compose -f docker-compose.yml up build")
型
我的简化项目树的概述:
├── backend
├── data
│ └── thesecretjwtkey.txt
├── deployscripts
│ └── deploy.py
├── docker-compose.yml
└── Jenkinsfile
型
在我的机器上一切正常...
1条答案
按热度按时间f5emj3cl1#
您有:
字符串
运行在Jenkins主机上的Docker守护进程正在尝试访问
../data/thesecretjwtkey.txt
,但此路径在主机的文件系统中解析,而不是在Docker容器中解析。thesecretjwtkey.txt
文件实际上位于Docker容器中,主机上的Docker守护进程无法访问。您需要更正
docker-compose.yml
中的文件路径,以反映在Jenkins主机上可访问的位置,而不是Docker容器内。型
并配置Jenkins管道,使机密文件在主机上Docker守护进程可访问的路径上可用:确保Jenkins管道将包含来自Jenkins代理的
thesecretjwtkey.txt
的目录Map到Docker守护进程可以访问的Docker容器路径上。型