gitlab ci中未填充已装载的Docker卷



我有一个gitlab-ci.yml作业,它带来了两个Docker容器。第一个容器是一个标准的Redis容器,第二个容器运行一个填充容器的自定义过程。此作业的目标是获取Redis容器的dump.rdb文件,并将其传递给其他作业。因此,我的工作看起来是这样的:

script:
- cd subdir
- docker run -d --name redis -v $PWD/redis-data:/data redis:latest
- docker run my_custom_image
- docker stop redis
artifacts:
paths:
- subdir/redis-data/dump.rdb
expire_in: 5 minutes

到目前为止还不错。my_custom_image连接到redis容器并报告它正确加载了所有内容,并且两个容器都干净地关闭。但是,subdir/redis-data为空。没有dump.rdb,什么都没有。在docker stop调用之后添加ls -la subdir/redis-data确认了这一点。我可以在我的机器上运行,一切都正常工作,只有在gitlab上才会中断。

在我看来,gitlab运行程序并不是在同一个目录中运行每一步,但这没有多大意义。有人能告诉我为什么挂载的卷没有得到dump.rdb吗?

我在这里发现了一个有同样问题的人的旧错误报告。看起来没有人能够解决这个问题,但他们建议只做一个docker cp来从运行的容器中提取数据。所以我做了:

script:
- cd subdir
- docker run -d --name redis -v $PWD/redis-data:/data redis:latest
- docker run my_custom_image
- echo SAVE | docker exec -i redis redis-cli
- docker cp redis:/data/dump.rdb redis-data/dump.rdb
- docker stop redis
artifacts:
paths:
- subdir/redis-data/dump.rdb
expire_in: 5 minutes

SAVE命令用于确保redis在运行docker cp提取转储文件之前已将所有内容刷新到磁盘。这对我来说很好,希望它更优雅,但你可以。

最新更新