如何通过docker cp从Docker容器复制指定.txt文件到主机?
解决Docker容器中复制特定类型文件到主机的问题
你遇到的问题很常见——docker cp本身不支持直接使用通配符来匹配文件类型,原因是命令里的*.txt会被主机的shell先解析,而不是传给容器内部处理。如果主机当前目录下没有.txt文件,shell就会把*.txt原样传给docker cp,自然找不到容器里对应的文件。
这里给你几个可行的解决方案:
方案1:用docker exec配合tar打包传输(推荐)
这个方法效率最高,尤其是文件数量较多的时候:
sudo docker exec env1_1 tar -czf - /path/*.txt | tar -xzf - -C .
- 左边的
docker exec会在容器内部把目标路径下的所有.txt文件打包成一个压缩包(通过-输出到标准输出) - 管道右边的
tar命令会把这个压缩包解压到主机的当前目录(-C .指定目标路径)
如果不需要压缩,也可以用未压缩的格式,速度可能更快:
sudo docker exec env1_1 tar -cf - /path/*.txt | tar -xf - -C .
方案2:循环逐个复制文件
如果文件数量不多,也可以用shell循环逐个复制:
sudo docker exec env1_1 ls /path/*.txt | while read file_path; do sudo docker cp env1_1:"$file_path" . done
这个命令会先让容器列出目标路径下的所有.txt文件,然后逐个通过docker cp复制到主机当前目录。
方案3:提前挂载Volume(适合长期场景)
如果以后经常需要在容器和主机之间同步这类文件,可以在启动容器时就挂载主机目录作为Volume:
sudo docker run -v /host/path:/container/path ... env1_1
这样容器里/container/path下的.txt文件会自动同步到主机的/host/path目录,不需要手动复制。
内容的提问来源于stack exchange,提问作者Jishan




