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

装载的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

我有一份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数据
为空。没有
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
提取转储文件之前已将所有内容刷新到磁盘。这对我来说很好用,希望它更优雅,但你就这样