Ответ 1
это работает для меня:
$(kubectl exec <pod-name> [-c <container-name>] -it -- cat <file-path>) > <local-file>
Скажем, у меня есть my-namespace → my-pod → 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
это работает для меня:
$(kubectl exec <pod-name> [-c <container-name>] -it -- cat <file-path>) > <local-file>
Что вы просите 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
.
Я заметил, что происходит сбой, когда вы пытаетесь указать пространство имен (как в качестве префикса к идентификатору модуля, так и с помощью -n
). Использование одного идентификатора модуля работает для меня:
kubectl cp postgres-1111111111-11abc:/tmp/dump.csv dump
Следующая команда kubectl cp NameSpace/POD_NAME: /DIR/FILE_NAME/tmp/
работает для меня.
Я нашел это использование наиболее удобным для меня
kubectl cp /tmp/file <your_namespace>/<your_pod>:/tmp/newfile
и другое направление
kubectl cp <your_namespace>/<your_pod>:/tmp/file /tmp/newfile
Я просто хочу подтвердить, что команда - kubectl cp - не работает, как описано в документации. Я использую как пространство имен, так и контейнер.
Удалите "/" после ":" при указании файла контейнера.
Так это
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 .
Пункт назначения также должен быть именем файла. Итак, команда должна быть
kubectl cp my-namepace/my-pod:/opt/tomcat/logs/catalina.2017-05-02.log -c my-container ./catalina.2017-05-02.log
Команда "cat" хорошо работает для файлов ascii. для других файлов будут ограничения, и скопированные файлы могут быть повреждены.