Memasang banyak volume pada wadah buruh pelabuhan?

152

Saya tahu saya bisa memasang direktori di host saya di wadah saya menggunakan sesuatu seperti

docker run -t -i -v '/on/my/host:/on/the/container' ubuntu /bin/bash

Apakah ada cara untuk membuat lebih dari satu pasangan host-container? misalnya daftar yang dipisahkan koma, atau meneruskan dalam array?

Seldo
sumber
seperti yang saya pahami kondisi dokumen saat ini, Anda tidak dapat memasang volume (judul pertanyaan), Anda tentu dapat memiliki banyak ikatan mengikat ke folder host (itulah yang diminta dalam tubuh pertanyaan)
Alexei Martianov

Jawaban:

260

Berikan beberapa -vargumen.

Misalnya:

docker -v /on/my/host/1:/on/the/container/1 \
       -v /on/my/host/2:/on/the/container/2 \
       ...
Charles Duffy
sumber
2
Oke, jadi saya melakukan ini dengan cara yang persis sama, tetapi ketika saya mencoba memanggil yang kedua dikatakan tidak ditemukan.
momal
run docker -v / home / usr / workspace / proj / WebContent / file / username: / mycode -v / home / usr / workspace / proj / WebContent / file: / tst gcc: 4.9 sh -c 'cd mycode; gcc -o myapp ./mycode.c; cd tst; ./myapp <./test.txt 'Ini adalah perintah saya, saya mencoba untuk mengkompilasi mycode.c yang ada di volume pertama, tetapi berikan stdin file yang sama dari volume yang berbeda. Bagaimana saya melakukannya?
momal
1
@YehCheez, saya akan (sangat) menyarankan membuka ini sebagai pertanyaan terpisah, dan mencoba untuk membangun alat reproduksi. (Jika Anda dapat melaporkan bug dengan gambar Docker di registri publik, dan membuat semua dependensi lokal dalam skrip yang diberikan dalam pertanyaan, itu akan ideal).
Charles Duffy
Apakah selalu membutuhkan jalur absolut?
xatzistnr
3
Tujuannya harus selalu absolut. Sumber harus berupa jalur absolut atau pengidentifikasi untuk volume bernama - lihat docs.docker.com/engine/admin/volumes/volumes untuk dokumen pada yang terakhir.
Charles Duffy
19

Docker sekarang merekomendasikan migrasi untuk menggunakan --mount.

Beberapa mount volume juga dijelaskan secara rinci dalam dokumentasi Docker saat ini.

Dari: https://docs.docker.com/storage/bind-mounts/

$ docker run -d \
  -it \
  --name devtest \
  --mount type=bind,source="$(pwd)"/target,target=/app \
  --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave \
  nginx:latest

Jawaban lama yang asli harus tetap berfungsi; hanya berusaha menjaga jawaban agar selaras dengan metode yang paling dikenal saat ini.

MadJangi
sumber
Layak menambahkan satu-satunya alasan Docker menyarankan migrasi adalah karena penelitian mereka menunjukkan --mount lebih mudah digunakan dan memiliki lebih banyak opsi. Menggunakan -v atau --mount tidak masalah, ini tergantung pada preferensi dan kebutuhan pribadi Anda.
KillerKode
18

Anda dapat menggunakan -vopsi beberapa kali dalam docker runperintah untuk memasang beberapa direktori dalam wadah:

docker run -t -i \
  -v '/on/my/host/test1:/on/the/container/test1' \
  -v '/on/my/host/test2:/on/the/container/test2' \
  ubuntu /bin/bash
Gaurav Sehgal
sumber
1
Apakah ini menambahkan sesuatu ke jawaban sebelumnya untuk efek yang sama ?
Charles Duffy
6

Anda dapat memiliki Baca saja atau Baca dan Tulis saja di volume

docker -v /on/my/host/1:/on/the/container/1:ro \

docker -v /on/my/host/2:/on/the/container/2:rw \
senthil sivasamy
sumber
1
mana yang merupakan opsi default?
Hammad Dar
-9

Atau Anda bisa melakukannya

docker run -v /var/volume1 -v /var/volume2 DATA busybox true
Joost van der Laan
sumber
4
Ini bukan tujuan OP. Ini menciptakan volume di dalam wadah dan tidak mengikatnya pada host.
Ioannis
8
Anda benar, seharusnya: docker run -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA busybox true
Joost van der Laan