kubernetes 如何从特定命名空间中pod的容器中复制文件?

hujrc8aj  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(9)|浏览(473)

假设我有my-namespace -〉my-pod -〉my-container,并且我有一个位于my-container的文件:/opt/tomcat/logs/catalina.2017-05-02.log。我应用了以下命令来复制不工作的文件,

kubectl cp my-namepace/my-pod:/opt/tomcat/logs/catalina.2017-05-02.log -c my-container .

注意:我的容器上有tar二进制文件
错误:

tar: Removing leading `/' from member names
error: open .: is a directory
fdbelqdn

fdbelqdn1#

您要求kubectl做的是将catalina.2017-05-02.log文件复制到当前上下文,但当前上下文是一个目录。错误说明您不能将文件复制为具有目录名。
尝试为文件的复制版本命名:
kubectl cp my-namepace/my-pod:/opt/tomcat/logs/catalina.2017-05-02.log -c my-container ./catalina.2017-05-02.log .

dphi5xsq

dphi5xsq2#

这对我很有效:

$(kubectl exec <pod-name> [-c <container-name>] -it -- cat <file-path>) > <local-file>
vatpfxk5

vatpfxk53#

源文件名和目标文件名应相同,以下命令对我有效:

kubectl cp namespace/pod-name:abc.log  .\Desktop\abc.log
93ze6v8z

93ze6v8z4#

我注意到,当您尝试指定名称空间时(既作为pod标识符的前缀,也使用-n选项),它会失败。

kubectl cp postgres-1111111111-11abc:/tmp/dump.csv dump
50pmv0ei

50pmv0ei5#

下面的命令kubectl cp NameSpace/POD_NAME:/DIR/FILE_NAME /tmp/对我很有效。

b1zrtrql

b1zrtrql6#

我发现这种用法对我来说最方便

kubectl cp /tmp/file <your_namespace>/<your_pod>:/tmp/newfile

和其他方向

kubectl cp <your_namespace>/<your_pod>:/tmp/file /tmp/newfile
xxls0lw8

xxls0lw87#

目标也应该是文件名。因此,命令应该是

kubectl cp my-namepace/my-pod:/opt/tomcat/logs/catalina.2017-05-02.log -c my-container ./catalina.2017-05-02.log

“cat”命令适用于ascii文件。对于其他文件,可能会有限制,复制的文件可能会损坏。

2mbi3lxu

2mbi3lxu8#

指定容器文件时,删除“:“后的“/”。
所以这

kubectl cp my-namepace/my-pod:/opt/tomcat/logs/catalina.2017-05-02.log -c my-container .

会变成这样:

kubectl cp my-namepace/my-pod:opt/tomcat/logs/catalina.2017-05-02.log -c my-container .
unguejic

unguejic9#

我尝试了上面给出的所有选项,它解决了错误,但警告仍然出现。

tar: Removing leading `/' from member names

顺便说一句,复制的文件还可以,只是警告有点混乱。
如果使用绝对路径kubectl cp namespace/pod:/somepath/somfile somepath/somefile将打印相同的警告
因此,如果文件在容器的工作目录中,则删除absulte路径,警告将消失。

k cp "default/name-redis-6d66b898d6-8xdkb:dump.rdb" ./dump.rdb

I moved the wanted file to the working dir in the pod

相关问题