Pertanyaan Menyalin file dari host ke kontainer Docker


Saya mencoba membuat cadangan dan memulihkan solusi untuk wadah Docker yang kami gunakan.

Saya memiliki gambar dasar Docker yang telah saya buat, ubuntu:base, dan tidak ingin membangunnya kembali setiap kali dengan file Docker untuk menambahkan file ke dalamnya.

Saya ingin membuat skrip yang berjalan dari mesin host dan membuat wadah baru menggunakan ubuntu:base Gambar Docker dan kemudian menyalin file ke dalam wadah itu.

Bagaimana cara menyalin file dari host ke penampung?


875
2018-04-07 08:28


asal


Jawaban:


Itu cp perintah dapat digunakan untuk menyalin file. Satu file spesifik dapat disalin seperti:

docker cp foo.txt mycontainer:/foo.txt
docker cp mycontainer:/foo.txt foo.txt

Banyak file yang ada di folder src dapat disalin ke dalam target folder menggunakan:

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

Referensi: Doker CLI mendokumentasikan cp 

Dalam versi Docker sebelum 1.8 itu hanya mungkin untuk menyalin file dari sebuah wadah ke host. Bukan dari tuan rumah ke wadah.


1515
2017-08-12 17:25



  1. Dapatkan nama penampung atau ID penampung singkat:

    $ docker ps
    
  2. Dapatkan id penampung lengkap:

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

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

CONTOH:

$ 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

atau

$ docker inspect -f   '{{.Id}}' d8e703d7e303

d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5

$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5**/root/file.txt

150
2017-07-17 14:01



Cara yang paling bersih adalah dengan memasang direktori host pada wadah sebelum menjalankan perintah Anda:

{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

109
2017-08-12 21:28



Berikut ini adalah cara yang cukup buruk dalam melakukannya tetapi berhasil.

docker run -i ubuntu /bin/bash -c 'cat > file' < file

101
2018-06-11 16:02



Jika Anda perlu melakukan ini pada kontainer yang sedang berjalan, Anda dapat menggunakan docker exec (ditambahkan pada 1.3).

Pertama, temukan nama atau ID penampung:

$ docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS                   NAMES
b9b7400ddd8f        ubuntu:latest                "/bin/bash"         2 seconds ago       Up 2 seconds                                elated_hodgkin

Dalam contoh di atas, kita bisa menggunakan b9b7400ddd8f atau elated_hodgkin.

Jika Anda ingin menyalin semuanya /tmp/somefiles pada tuan rumah /var/www dalam wadah:

$ cd /tmp/somefiles
$ tar -cv * | docker exec -i elated_hodgkin tar x -C /var/www

Kami kemudian bisa exec /bin/bash dalam penampung dan memverifikasi itu berfungsi:

$ docker exec -it elated_hodgkin /bin/bash
root@b9b7400ddd8f:/# ls /var/www
file1  file2

37
2018-01-24 07:38



Solusinya diberikan di bawah ini,

Dari shell Docker,

root@123abc:/root#  <-- get the container ID

Dari tuan rumah

cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root

File akan langsung disalin ke lokasi tempat penampung berada di sistem berkas.


32
2018-06-23 17:01



Solusi lain untuk menyalin file ke dalam wadah yang sedang berjalan adalah menggunakan tar:

tar -c foo.sh | docker exec -i theDockerContainer /bin/tar -C /tmp -x

Salinan file foo.sh ke /tmp dari wadah.

Edit: Hapus reduntant -f, terimakasih untuk Maartens komentar.


25
2018-04-21 13:50



Sangat mudah

  1. Buat dockerfile baru dan gunakan gambar yang ada sebagai basis Anda.

    FROM myName/myImage:latest
    
    ADD myFile.py bin/myFile.py
    
  2. Kemudian buat wadah:

    docker build .
    

20
2017-07-08 20:47