创建一个备份脚本来将mongodb转储到容器中,我需要将文件夹复制到容器外,Docker cp似乎不能使用通配符:
cp
docker cp mongodb:mongo_dump_* .
在终端中抛出以下代码:守护程序的错误响应:lstat/变量/库/停靠器/aufs/mnt/某个哈希/mongo_dump_*:没有这样的文件或目录是否有在cp命令中使用通配符的解决方法?
3pvhb19x1#
我也遇到过类似的问题,必须分两步解决:
$ docker exec <id> bash -c "mkdir -p /extract; cp -f /path/to/fileset* /extract" $ docker cp <id>:/extract/. .
wecizke32#
看起来还没有办法在docker cp命令https://github.com/docker/docker/issues/7710中使用通配符。您可以在容器内的一个文件夹中创建mongo转储文件,然后复制该文件夹,如另一个答案here所述。如果您有一个大型数据集和/或需要经常执行该操作,最好的处理方法是使用Docker卷,这样您就可以直接从容器访问文件到您的主机文件夹,而无需使用任何其他命令:https://docs.docker.com/engine/userguide/containers/dockervolumes/
mm9b1k5b3#
今天我也遇到了同样的问题。我的解决方法是:
docker exec container /bin/sh -c 'tar -cf - /some/path/*' | tar -xvf -
霍普这会有帮助的。
vwhgwdsa4#
另一种可能性是首先获取一个包含ls的文件列表,ls在容器中使用通配符,然后在while循环中将ls的每一行作为参数的一部分传递给docker cp:在您的情况下:
ls
docker cp
docker exec container bash -c "ls mongo_dump_*" | while read line; do docker cp container:/$line .; done
另一个简单的例子是将所有png文件从docker容器中的/home复制到当前目录。
png
/home
docker exec container bash -c "ls home/*.png" | while read line; do docker cp container:/$line .; done
4条答案
按热度按时间3pvhb19x1#
我也遇到过类似的问题,必须分两步解决:
wecizke32#
看起来还没有办法在docker cp命令https://github.com/docker/docker/issues/7710中使用通配符。
您可以在容器内的一个文件夹中创建mongo转储文件,然后复制该文件夹,如另一个答案here所述。
如果您有一个大型数据集和/或需要经常执行该操作,最好的处理方法是使用Docker卷,这样您就可以直接从容器访问文件到您的主机文件夹,而无需使用任何其他命令:https://docs.docker.com/engine/userguide/containers/dockervolumes/
mm9b1k5b3#
今天我也遇到了同样的问题。我的解决方法是:
霍普这会有帮助的。
vwhgwdsa4#
另一种可能性是首先获取一个包含
ls
的文件列表,ls
在容器中使用通配符,然后在while循环中将ls
的每一行作为参数的一部分传递给docker cp
:在您的情况下:
另一个简单的例子是将所有
png
文件从docker容器中的/home
复制到当前目录。