如何在docker-compose.yml中正确配置共享卷?解决Jenkins项目共享问题
任务
- 在AWS服务器上搭建Jenkins并在任务中执行自动化测试
操作步骤
- 在服务器上创建了
docker-compose.yml并启动服务:
version: '3' services: jenkins: image: jenkins/jenkins:lts ports: - "8080:8080" - "22:22" - "443:443" volumes: - jenkins_data:/var/jenkins_home - /home/user/.ssh:/var/jenkins_home/.ssh depends_on: - java java: image: openjdk:17-jdk volumes: - ./my-java-project:/app - jenkins_data:/var/jenkins_home <------- updated working_dir: /app command: tail -f /dev/null volumes: jenkins_data:
- 已通过
ec2-ip:8080成功启动Jenkins
GitLab集成问题
- 在任务中创建并建立了GitLab连接
- 添加Git作为源代码管理工具
- 任务执行完成后看似正常,但项目被下载到Jenkins容器内部的
/var/jenkins_home/...目录中,并未同步到服务器的/home/ec2-user/jenkins/my-java-project文件夹(该文件夹为空),导致Java容器无法访问该项目
问题
如何在docker-compose.yml中正确配置共享卷?
解决方案
核心思路
让Jenkins拉取的代码能同步到服务器本地目录,再让Java容器挂载该目录;或直接让两个容器共享一个绑定挂载卷,确保代码双向同步。
具体配置修改
方案1:直接挂载服务器项目目录
修改docker-compose.yml,让Jenkins和Java容器共享服务器上的/home/ec2-user/jenkins/my-java-project目录:
version: '3' services: jenkins: image: jenkins/jenkins:lts ports: - "8080:8080" - "22:22" - "443:443" volumes: - jenkins_data:/var/jenkins_home - /home/user/.ssh:/var/jenkins_home/.ssh # 挂载服务器项目目录到Jenkins任务的工作空间路径 - /home/ec2-user/jenkins/my-java-project:/var/jenkins_home/workspace/my-java-project depends_on: - java # 解决容器写入权限问题,也可提前在服务器执行chown -R 1000:1000 /home/ec2-user/jenkins/my-java-project(Jenkins默认UID为1000) user: root java: image: openjdk:17-jdk volumes: # 挂载服务器项目目录到Java容器工作目录 - /home/ec2-user/jenkins/my-java-project:/app working_dir: /app command: tail -f /dev/null volumes: jenkins_data:
注意:替换
/var/jenkins_home/workspace/my-java-project为你Jenkins任务实际的工作空间路径(可在Jenkins任务的「工作空间」页面查看)
方案2:定义共享绑定卷
通过自定义绑定卷实现共享,避免硬编码绝对路径:
version: '3' services: jenkins: image: jenkins/jenkins:lts ports: - "8080:8080" - "22:22" - "443:443" volumes: - jenkins_data:/var/jenkins_home - /home/user/.ssh:/var/jenkins_home/.ssh # 绑定共享卷到Jenkins工作空间 - project_volume:/var/jenkins_home/workspace/my-java-project depends_on: - java user: root java: image: openjdk:17-jdk volumes: # 绑定共享卷到Java容器工作目录 - project_volume:/app working_dir: /app command: tail -f /dev/null volumes: jenkins_data: # 定义绑定卷指向服务器项目目录 project_volume: driver: local driver_opts: type: none o: bind device: /home/ec2-user/jenkins/my-java-project
额外配置说明
- Jenkins任务调整:在任务的「源代码管理」中,确认代码拉取路径与挂载的Jenkins容器内目录一致
- 权限检查:启动容器前,确保服务器上的
my-java-project目录权限可被Jenkins容器写入,可执行chmod 775 /home/ec2-user/jenkins/my-java-project
内容的提问来源于stack exchange,提问作者hhrzc
相关产品推荐
相关产品推荐

