You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

额外配置说明

  1. Jenkins任务调整:在任务的「源代码管理」中,确认代码拉取路径与挂载的Jenkins容器内目录一致
  2. 权限检查:启动容器前,确保服务器上的my-java-project目录权限可被Jenkins容器写入,可执行chmod 775 /home/ec2-user/jenkins/my-java-project

内容的提问来源于stack exchange,提问作者hhrzc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:23:32