装载的Docker卷未在gitlab ci中填充
我有一份gitlab-ci.yml的工作,负责提供两个Docker容器。第一个容器是一个标准的Redis容器,第二个容器运行一个自定义进程来填充容器。此作业的目标是获取Redis容器的装载的Docker卷未在gitlab ci中填充,docker,gitlab,gitlab-ci,Docker,Gitlab,Gitlab Ci,我有一份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_i
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数据
为空。没有dump.rdb
,什么都没有。在docker stop
调用后添加ls-la subdir/redis数据
,可以确认这一点。我可以在我的机器上运行,并且一切都正常工作,只有在gitlab上才会出现这种情况
在我看来,gitlab runner并不是在同一个目录中运行每一步,但这没有多大意义。有人能告诉我为什么装载的卷没有得到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
提取转储文件之前已将所有内容刷新到磁盘。这对我来说很好用,希望它更优雅,但你就这样