在Jenkins中清理docker-compose数据卷

时间:2017-05-16 12:39:16

标签: docker jenkins docker-compose jenkins-pipeline

我有一个基于Docker和docker-compose文件的项目,我想通过Jenkins测试。

我们有许多docker-compose文件用于测试,所有这些文件都写入相对于项目根目录的data目录,例如

version: '3.1'
services:
  simple:
    build:
      context: .
      dockerfile: ./Dockerfile-standalone
    ports:
     - "1005:1005"
    volumes:
     - ./data/simple/logs:/launcher/logs
     - ./data/simple/repository:/launcher/repository

我遇到的问题是docker以root身份创建数据目录,并且无法从Jenkins中清除它。我不允许在Jenkins的工作中使用sudo,所以这不是一个选择。

我至少需要本地文件系统上可用的日志目录来运行Jenkins作业中的一些检查。

如何确保在构建结束时删除保存数据卷的整个data目录?

1 个答案:

答案 0 :(得分:1)

最简单的方法是让docker通过在撰写文件中使用命名卷来管理卷,例如:

version: '3.1'
services:
  simple:
    build:
      context: .
      dockerfile: ./Dockerfile-standalone
    ports:
     - "1005:1005"
    volumes:
     - simple-logs:/launcher/logs
     - simple-repository:/launcher/repository
volumes:
    - simple-logs:
    - simple-repository:

然后,这些卷由docker存储在私有区域(/var/lib/docker为我)。但最重要的是,它们可以通过docker volume进行管理。 Docker-compose甚至为使用docker-compose down --volumes删除这些卷提供了一个很好的简写。根据文档,此参数将删除在Compose文件的部分中声明的命名卷和附加到容器的匿名卷。

我的清理脚本现在只需调用docker-compose down --volumes