我有一个基于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
目录?
答案 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
。