将带有通配符的文件夹从Docker容器复制到主机

5rgfhyps  于 2023-03-01  发布在  Docker
关注(0)|答案(4)|浏览(227)

创建一个备份脚本来将mongodb转储到容器中,我需要将文件夹复制到容器外,Docker cp似乎不能使用通配符:

docker cp mongodb:mongo_dump_* .

在终端中抛出以下代码:
守护程序的错误响应:lstat/变量/库/停靠器/aufs/mnt/某个哈希/mongo_dump_*:没有这样的文件或目录
是否有在cp命令中使用通配符的解决方法?

3pvhb19x

3pvhb19x1#

我也遇到过类似的问题,必须分两步解决:

$ docker exec <id> bash -c "mkdir -p /extract; cp -f /path/to/fileset* /extract"
$ docker cp <id>:/extract/. .
wecizke3

wecizke32#

看起来还没有办法在docker cp命令https://github.com/docker/docker/issues/7710中使用通配符。
您可以在容器内的一个文件夹中创建mongo转储文件,然后复制该文件夹,如另一个答案here所述。
如果您有一个大型数据集和/或需要经常执行该操作,最好的处理方法是使用Docker卷,这样您就可以直接从容器访问文件到您的主机文件夹,而无需使用任何其他命令:https://docs.docker.com/engine/userguide/containers/dockervolumes/

mm9b1k5b

mm9b1k5b3#

今天我也遇到了同样的问题。我的解决方法是:

docker exec container /bin/sh -c 'tar -cf - /some/path/*' | tar -xvf -

霍普这会有帮助的。

vwhgwdsa

vwhgwdsa4#

另一种可能性是首先获取一个包含ls的文件列表,ls在容器中使用通配符,然后在while循环中将ls的每一行作为参数的一部分传递给docker cp
在您的情况下:

docker exec container bash -c "ls mongo_dump_*" | while read line; do docker cp container:/$line .; done

另一个简单的例子是将所有png文件从docker容器中的/home复制到当前目录。

docker exec container bash -c "ls home/*.png" | while read line; do docker cp container:/$line .; done

相关问题