Saya menggunakan Docker dengan cara lama, dengan wadah volume:
docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"
Tapi sekarang saya berubah ke cara baru dengan membuat volume bernama:
docker volume create --name my-jenkins-volume
Saya mengikat volume baru ini ke wadah Jenkins baru. Satu-satunya hal yang saya tinggalkan adalah folder di mana saya memiliki /var/jenkins_home
wadah jenkins saya sebelumnya. (dengan menggunakan docker cp
) Sekarang saya ingin mengisi volume baru saya dengan konten folder itu.
Bisakah saya menyalin konten folder itu ke /var/lib/jenkins/volume/my-jenkins-volume/_data
?
docker volume inspect my-jenkins-volume --format '{{.Mountpoint}}'
untuk mendapatkan lokasi fisiknya secara terprogram. Masih belum terasa seperti ide yang bagus.docker cp
dan hapus./var/lib/docker/volumes/my-jenkins-volume/_data
saat menggunakan Docker untuk Mac tidak berfungsi karena file disimpan di dalam mesin virtual xhyve . Lihat forums.docker.com/t/var-lib-docker-does-not-exist-on-host/18314Anda dapat mengurangi jawaban yang diterima menjadi satu baris menggunakan, misalnya
sumber
-v `pwd`:/src
menyiratkan bahwa perintah berjalan di host? (Bagaimana bisa host memetakanpwd
jika itu mesin yang berbeda, misalnya? - tidak bisa.) Jika perintah buruh pelabuhan tidak berjalan pada host ini tidak berfungsi. Saya percaya itu sebabnya kami memiliki docker cp. Sepertinya ini bukan "cara" untuk buruh pelabuhan - ini hanya kasus khusus yang hanya bekerja ketika perintah buruh pelabuhan berjalan di host. Apakah saya mengerti dengan benar?pwd
harus menyelesaikan file di mesin host. Dari dokumentasi pemasangan buruh pelabuhan: "Dalam kasus pemasangan bind, bidang pertama adalah jalur ke file atau direktori pada mesin host."pwd
yang bahkan tidak perlu ada di host jarak jauh. Sebagai gantinya solusi oleh Dmytro Melnychuk (buat + cp + rm) tidak menyalin yang lokal ke dalam wadah di mana pun ia berjalan.Anda tidak perlu memulai beberapa penampung untuk menambahkan data ke volume bernama yang sudah ada, cukup buat penampung dan salin data di sana:
sumber
hello-world
dan itu juga berhasil.busybox
berukuran 1,22MB. Sebaliknyahello-world
adalah 13.3kB. Pertanyaannya adalah: Dengan cara yang sama kita dapat melakukan Dockerfile DARI awal, dapatkah kita melakukan "pembuatan kontainer buruh pelabuhan" dengan "tidak ada" sebagai gambar karena kita hanya ingin "memasang" volume dan tidak pernah memulai wadah?docker cp
adalahdocker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
Berikut langkah-langkah untuk menyalin konten ~ / data ke volume buruh pelabuhan bernama my-vol
Langkah 1. Pasang volume ke wadah "sementara". Untuk itu jalankan di terminal perintah ini:
docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine
Langkah 2. Salin konten ~ / data ke my-vol . Untuk itu jalankan perintah ini di jendela terminal baru:
cd ~/data docker cp . alpine:/data
Ini akan menyalin konten ~ / data ke volume-saya . Setelah menyalin keluar dari wadah sementara.
sumber