k8s容器内的东西复制出来_如何把文件放进Docker或Kubernetes中,如何拷贝出来

1 前言

在有些场景,我们需要把外部的文件放到 Pod 中去,让应用去读取数据。

2 Docker

(1)从宿主复制文件到 Docker 容器:

$ docker exec 6619ff360cce ls /opt/h2-data

pkslow.mv.db

$ docker cp pkslow/pkslow.txt 6619ff360cce:/opt/h2-data

$ docker exec 6619ff360cce ls /opt/h2-data

pkslow.mv.db

pkslow.txt

上面例子成功把 pkslow.txt 复制到了容器的 opt/h2-data 目录上。

(2)从宿主复制目录到 Docker 容器:

$ docker cp pkslow 6619ff360cce:/opt/h2-data

$ docker exec 6619ff360cce ls /opt/h2-data

pkslow

pkslow.mv.db

pkslow.txt

$ docker exec 6619ff360cce ls /opt/h2-data/pkslow

pkslow.txt

(3)从容器复制文件或目录到宿主机器:

$ rm -rf pkslow/

$ docker cp 6619ff360cce:/opt/h2-data/pkslow ./

$ docker cp 6619ff360cce:/opt/h2-data/pkslow/pkslow.txt ./

3 Kubernetes

(1)从客户端复制文件或目录到 Pod :

$ kubectl cp pkslow.txt h2-db-5967bf999f-8qr87:/opt/h2-data

$ kubectl exec h2-db-5967bf999f-8qr87 ls /opt/h2-data

pkslow.mv.db

pkslow.txt

$ kubectl cp pkslow h2-db-5967bf999f-8qr87:/opt/h2-data

$ kubectl exec h2-db-5967bf999f-8qr87 ls /opt/h2-data

pkslow

pkslow.mv.db

pkslow.txt

(2)当要从 Pod 复制文件回来就有点不一样:

# 目标目录要指定,与源文件类型匹配

$ kubectl cp default/h2-db-5967bf999f-8qr87:/opt/h2-data/pkslow ./pkslow

tar: Removing leading `/' from member names

# 目标文件要指定,与源文件类型匹配

$ kubectl cp default/h2-db-5967bf999f-8qr87:/opt/h2-data/pkslow.txt ./pkslow.txt

default 为 namespace ,可以指定。

指定 Pod 的源文件复制目录时,如果以 / 开头,会有以下日志,但实际也会成功复制:

tar: Removing leading `/' from member names

4 总结

对于 Docker 可以通过 mount 一个宿主目录来实现文件共享,这样会方便一些。或者 Docker 内部启动一个 ftp 服务,再把文件传进去。

而对于 Kubernetes 就比较麻烦,可以创建一个共享的 pvc 挂在固定的一个 Pod 里,然后通过 kubectl cp 来实现文件共享,这样其它 Pod 可以通过挂共享的 pvc 实现数据访问。

欢迎关注微信公众号< 南瓜慢说 >,将持续为你更新…

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值