如何仅使用Containerd的ctr命令将主机文件复制到容器中
如何将主机文件复制到通过Containerd的
ctr命令启动的容器中 本次测试使用的是镜像docker.io/bitnami/apache:latest,由于它是rootless容器,操作难度大幅提升——比如在运行的容器中安装curl即便可行也十分繁琐。我正在尝试找出如何将主机文件复制到这个通过Containerd的ctr命令启动的容器中。
ctr的文档十分匮乏,以下是我仅使用ctr命令启动容器并尝试以root身份连接的操作步骤:
ctr image pull docker.io/bitnami/apache:latest ctr container create -t docker.io/bitnami/apache:latest bitnamiap ctr containers ls # 检查容器是否创建完成 ctr task start -d bitnamiap # 启动容器 ctr -n default task ls # 检查容器是否运行 executor_id="bitnamiap" # 以root身份连接,但作用有限 ctr -n default tasks exec --tty --exec-id test1 --user=0 $executor_id bash
我尝试使用快照挂载容器,但仅能读取容器内文件,无法写入。这是设计特性而非rootless容器的问题,相关技术讨论也证实此挂载是单向的。操作命令如下:
mkdir -p /tmp/ctrtransfer ctr -n default snapshot mounts /tmp/ctrtransfer "$executor_id" | sh
不过我推测,如果ctr无法直接实现文件复制,或许可以通过处理ctr snapshot mount的输出来访问容器的写入层,完成文件复制。
注意事项:
- 曾尝试
docker cp,但在该场景下无效;本次需求是尽可能仅使用containerd和runc工具实现 - 未尝试nerdctl,这并非本次目标;不过若有人能解释nerdctl的底层实现方式也可
- 可以使用
nsenter或网络工具将文件传入容器,但我更希望通过挂载或ctr API理解containerd的内部工作原理来实现,掌握本地可用的工具是十分实用的内容
内容的提问来源于stack exchange,提问作者creatldd1 creatldd1
相关产品推荐
相关产品推荐

