Containerd中如何实现等效docker cp从容器拷贝文件到宿主机的操作
Containerd 等效
docker cp 命令的实现方法 通用场景操作(运行中容器推荐)
Containerd 原生的 ctr 命令没有提供直接的 cp 子命令,可以通过tar管道配合容器执行命令实现文件拷贝:
从容器拷贝文件到宿主机
命令语法:
ctr -n <命名空间> task exec -w / <容器ID> tar -cf - <容器内文件路径> | tar -xf - -C <宿主机目标目录>
你举的示例场景(将ed128ed容器内的/etc/file1拷贝到宿主机当前目录的file1)对应命令:
ctr -n default task exec -w / ed128ed tar -cf - etc/file1 | tar -xf - --strip-components=1
参数说明:
-n default指定Containerd命名空间,Kubernetes创建的容器需要替换为-n k8s.io--strip-components=1用于去掉tar包自带的第一层目录前缀,直接提取出目标文件
从宿主机拷贝文件到容器
命令语法:
tar -cf - <宿主机文件路径> | ctr -n <命名空间> task exec -w / <容器ID> tar -xf - -C <容器内目标目录>
简化用法(兼容Docker命令)
如果你使用Containerd官方维护的兼容CLI工具nerdctl,可以直接使用和Docker完全一致的cp语法:
nerdctl cp ed128ed:/etc/file1 file1
已停止容器操作
如果容器处于停止状态无法执行exec命令,可以通过挂载容器快照层的方式拷贝文件:
- 创建临时挂载目录
mkdir -p /tmp/ctr-mount - 挂载容器可写快照层
ctr -n default snapshots mount /tmp/ctr-mount ed128ed - 拷贝目标文件
cp /tmp/ctr-mount/etc/file1 ./file1 - 操作完成后卸载快照
umount /tmp/ctr-mount
内容的提问来源于stack exchange,提问作者Shane Warne
相关产品推荐
相关产品推荐

