How to copy files from host to Docker container?

前端 未结 30 2527
南方客
南方客 2020-11-22 06:58

I am trying to build a backup and restore solution for the Docker containers that we work with.

I have Docker base image that I have created, ubuntu:base

相关标签:
30条回答
  • 2020-11-22 07:20
    docker cp SRC_PATH CONTAINER_ID:DEST_PATH
    

    For example, I want to copy my file xxxx/download/jenkins to tomcat

    I start to get the id of the container Tomcat

    docker ps
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
    63686740b488        tomcat              "catalina.sh run"   12 seconds ago      Up 11 seconds       0.0.0.0:8080->8080/tcp   peaceful_babbage
    
    docker cp xxxx/download/jenkins.war  63686740b488:usr/local/tomcat/webapps/
    
    0 讨论(0)
  • 2020-11-22 07:22

    Assuming the container is already running, type the given command:

    # cat /path/to/host/file/ | docker exec -i -t <container_id> bash -c "/bin/cat > /path/to/container/file"
    

    To share files using shared directory, run the container by typing the given command:

    # docker run -v /path/to/host/dir:/path/to/container/dir ...
    

    Note: Problems with permissions might arise as container's users are not the same as the host's users.

    0 讨论(0)
  • 2020-11-22 07:23
    1. Get container name or short container id:

      $ docker ps
      
    2. Get full container id:

      $ docker inspect -f   '{{.Id}}'  SHORT_CONTAINER_ID-or-CONTAINER_NAME
      
    3. Copy file:

      $ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE
      

    EXAMPLE:

    $ docker ps
    
    CONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMES
    
    d8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare
    
    $ docker inspect -f   '{{.Id}}' cranky_pare
    

    or

    $ docker inspect -f   '{{.Id}}' d8e703d7e303
    
    d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5
    
    $ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5**/root/file.txt
    
    0 讨论(0)
  • 2020-11-22 07:25

    The cp command can be used to copy files.

    One specific file can be copied TO the container like:

    docker cp foo.txt mycontainer:/foo.txt
    

    One specific file can be copied FROM the container like:

    docker cp mycontainer:/foo.txt foo.txt
    

    For emphasis, mycontainer is a container ID, not an image ID.

    Multiple files contained by the folder src can be copied into the target folder using:

    docker cp src/. mycontainer:/target
    docker cp mycontainer:/src/. target
    

    Reference: Docker CLI docs for cp

    In Docker versions prior to 1.8 it was only possible to copy files from a container to the host. Not from the host to a container.

    0 讨论(0)
  • 2020-11-22 07:25

    Typically there are three types:

    1. From a container to the host

      docker cp container_id:./bar/foo.txt .
      

    1. From the host to a container

      docker exec -i container_id sh -c 'cat > ./bar/foo.txt' < ./foo.txt
      

    1. From a container to a container mixes 1 and 2

      docker cp container_id1:./bar/foo.txt .
      
      docker exec -i container_id2 sh -c 'cat > ./bar/foo.txt' < ./foo.txt
      

    0 讨论(0)
  • 2020-11-22 07:26

    The cleanest way is to mount a host directory on the container when starting the container:

    {host} docker run -v /path/to/hostdir:/mnt --name my_container my_image
    {host} docker exec -it my_container bash
    {container} cp /mnt/sourcefile /path/to/destfile
    
    0 讨论(0)
提交回复
热议问题