Как скопировать файл из контейнера в контейнере в определенном пространстве имен?

Скажем, у меня есть 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

Ответ 1

это работает для меня:

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

Ответ 2

Что вы просите 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.

Ответ 3

Я заметил, что происходит сбой, когда вы пытаетесь указать пространство имен (как в качестве префикса к идентификатору модуля, так и с помощью -n). Использование одного идентификатора модуля работает для меня:

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

Ответ 4

Следующая команда kubectl cp NameSpace/POD_NAME: /DIR/FILE_NAME/tmp/ работает для меня.

Ответ 5

Я нашел это использование наиболее удобным для меня

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

и другое направление

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

Ответ 6

Я просто хочу подтвердить, что команда - kubectl cp - не работает, как описано в документации. Я использую как пространство имен, так и контейнер.

Ответ 7

Удалите "/" после ":" при указании файла контейнера.

Так это

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 .

Ответ 8

Пункт назначения также должен быть именем файла. Итак, команда должна быть

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

Команда "cat" хорошо работает для файлов ascii. для других файлов будут ограничения, и скопированные файлы могут быть повреждены.