How to Do Kubectl cp from running pod to local,says no such file or directory

Viewed 15388

How to Do Kubectl cp from running pod to local,says no such file or directory

I have contents in Ubuntu container as below

vagrant@ubuntu-xenial:~/k8s/pods$ kubectl exec command-demo-67m2b -c 
ubuntu 
-- sh -c "ls /tmp"
docker-sock

Now simply i want to copy above /tmp contents using below kubectl cp command

kubectl cp command-demo-67m2b/ubuntu:/tmp /home

I have a command output as below

vagrant@ubuntu-xenial:~/k8s/pods$ kubectl cp command-demo-67m2b/ubuntu:/tmp 
/home
error: tmp no such file or directory

Now All i want to do is copy above /tmp folder to local host,unfortunately kubectl says no such file or directory. I amn confused when /tmp folder exists in Ubuntu container why kubectl cp saying folder not found

My pod is command-demo-67m2b and container name is ubuntu

But the pod is up and running as shown below

vagrant@ubuntu-xenial:~/k8s/pods$ kubectl describe pods  command-demo-67m2b
Name:           command-demo-67m2b
Namespace:      default
Node:           ip-172-31-8-145/172.31.8.145
Start Time:     Wed, 16 Jan 2019 00:57:05 +0000
Labels:         controller-uid=a4ac12c1-1929-11e9-b787-02d8b37d95a0
            job-name=command-demo
Annotations:    kubernetes.io/limit-ranger: LimitRanger plugin set: memory 
request for container ubuntu; memory limit for container ubuntu
Status:         Running
IP:             10.1.40.75
Controlled By:  Job/command-demo
Containers:
command-demo-container:
Container ID:   
docker://c680fb336242f456d90433a9aa89cf3e1cb1d45d73447769fcf86ce329176437
Image:          tarunkumard/fromscratch6.0
Image ID:       docker- ullable://tarunkumard/fromscratch6.0@sha256:709b588aa4edcc9bc2b39bee60f248bb02347a605da09fb389c448e41e2f543a
Port:           <none>
Host Port:      <none>
State:          Terminated
  Reason:       Completed
  Exit Code:    0
  Started:      Wed, 16 Jan 2019 00:57:07 +0000
  Finished:     Wed, 16 Jan 2019 00:58:36 +0000
Ready:          False
Restart Count:  0
Limits:
  memory:  1Gi
Requests:
  memory:     900Mi
Environment:  <none>
Mounts:
  /opt/gatling-fundamentals/build/reports/gatling/ from docker-sock (rw)
  /var/run/secrets/kubernetes.io/serviceaccount from default-token-w6jt6 
(ro)
ubuntu:
Container ID:  
docker://7da9d43816253048fb4137fadc6c2994aac93fd272391b73f2fab3b02487941a
Image:         ubuntu:16.04
Image ID:      docker- 
Port:          <none>
Host Port:     <none>
Command:
  /bin/bash
  -c
  --
Args:
  while true; do sleep 10; done;
State:          Running
  Started:      Wed, 16 Jan 2019 00:57:07 +0000
Ready:          True
Restart Count:  0
Limits:
  memory:  1Gi
Requests:
  memory:  1Gi
Environment:
  JVM_OPTS:  -Xms900M -Xmx1G
Mounts:
  /docker-sock from docker-sock (rw)
  /var/run/secrets/kubernetes.io/serviceaccount from default-token-w6jt6 
(ro)
Conditions:
Type              Status
Initialized       True
Ready             False
ContainersReady   False
PodScheduled      True
Volumes:
docker-sock:
Type:    EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
default-token-w6jt6:
Type:        Secret (a volume populated by a Secret)
SecretName:  default-token-w6jt6
Optional:    false
QoS Class:       Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
             node.kubernetes.io/unreachable:NoExecute for 300s

Events:

Here is my yaml file in case you need for reference:-

apiVersion: batch/v1
kind: Job
metadata:
name: command-demo
spec:
ttlSecondsAfterFinished: 100
template:
spec:
  volumes:
    - name: docker-sock                   # Name of the AWS EBS Volume
      emptyDir: {}
  restartPolicy: Never
  containers:
    - name: command-demo-container
      image: tarunkumard/fromscratch6.0
      volumeMounts:
        - mountPath: /opt/gatling-fundamentals/build/reports/gatling/    
   # 
   Mount path within the container
          name: docker-sock                       # Name must match the 
  AWS 
  EBS volume name defined in spec.Volumes
      imagePullPolicy: Never
      resources:
        requests:
          memory: "900Mi"
        limits:
          memory: "1Gi"
    - name: ubuntu
      image: ubuntu:16.04
      command: [ "/bin/bash", "-c", "--" ]
      args: [ "while true; do sleep 10; done;" ]
      volumeMounts:
        - mountPath: /docker-sock    # Mount path within the container
          name: docker-sock                       # Name must match the 
   AWS 
   EBS volume name defined in spec.Volumes
      imagePullPolicy: Never
      env:
      - name: JVM_OPTS
        value: "-Xms900M -Xmx1G"

I expect kubectl cp command to copy contents from pod container to local

1 Answers

In your original command to exec into a container, you pass the -c ubuntu command, meaning you're selecting the Ubuntu container from the pod:

kubectl exec command-demo-67m2b -c 
ubuntu 
-- sh -c "ls /tmp"

However, in your kubectl cp command, you're not specifying the same container:

kubectl cp command-demo-67m2b/ubuntu:/tmp /home

Try this:

kubectl cp command-demo-67m2b:/tmp /home -c ubuntu
Related