Docker container'a birden çok birim mi takıyorsunuz?


165

Ana bilgisayarımdaki bir dizini kapsayıcıma,

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

Birden fazla ana bilgisayar kapsayıcı çifti oluşturmanın bir yolu var mı? örneğin virgülle ayrılmış bir liste veya bir dizi geçirme?


Docs terimlerinin şu anki durumunu anladığım için, bir birimi bağlayamazsınız (soru başlığı), ana klasörlere kesinlikle birçok bağlama bağlantısına sahip olabilirsiniz (bu soru gövdesinde sorulmaktadır)
Alexei Martianov

Yanıtlar:


278

Birden çok -vargüman iletin.

Örneğin:

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

2
Tamam, ben de bunu aynı şekilde yapıyorum ama ikinciyi aramaya çalıştığımda bulunamadı diyor.
tam

docker run -v / home / usr / çalışma alanı / proj / WebContent / dosya / kullanıcı adı: / kodum -v / home / usr / çalışma alanı / proj / WebContent / dosya: / tst gcc: 4.9 sh -c 'cd kodum; gcc -o benimapp ./mycode.c; cd tst; ./myapp <./test.txt 'Bu benim komutum, ilk ciltte bulunan mycode.c dosyasını derlemeye çalışıyorum, ancak aynı dosyaya farklı bir birimden bir stdin veriyorum. Nasıl yaparım?
tam

1
@YehCheez, bunu ayrı bir soru olarak açmayı ve bir çoğaltıcı oluşturmaya çalışmayı (şiddetle) öneririm. (Hatayı genel kayıt defterinde bir Docker görüntüsü ile yeniden oluşturabilirseniz ve soruda verilen komut dosyasında tüm yerel bağımlılıkları oluşturabilirseniz, bu ideal olacaktır).
Charles Duffy

Her zaman mutlak yollara mı ihtiyaç duyar?
xatzistnr

3
Hedef her zaman mutlak olmalıdır. Kaynağın mutlak bir yol ya da adlandırılmış bir birim için tanımlayıcı olması gerekir - ikincisiyle ilgili belgeler için docs.docker.com/engine/admin/volumes/volumes adresine bakın .
Charles Duffy

31

Docker artık kullanıma doğru geçiş yapılmasını öneriyor --mount.

Birden çok birim bağlantısı, mevcut Docker belgelerinde ayrıntılı olarak açıklanmıştır.

Gönderen: 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

Orijinal eski cevap yine de çalışmalıdır; Sadece cevabı mevcut en iyi bilinen yöntemle uyumlu tutmaya çalışıyorum.


Docker'ın geçişi önermesinin tek nedenini eklemeye değer, çünkü araştırmaları --mount'un kullanımının daha kolay olduğunu ve daha fazla seçeneğe sahip olduğunu gösteriyor. -V veya --mount kullanmak tamamen iyidir, bu sizin kişisel tercih ve ihtiyaçlarınıza bağlıdır.
KillerKode


7

Birimde Salt Okunur veya Yalnızca Okuma ve Yazma seçeneklerine sahip olabilirsiniz

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

docker -v /on/my/host/2:/on/the/container/2:rw \

1
varsayılan seçenek hangisi?
Hammad Dar

-10

Ya da yapabilirsin

docker run -v /var/volume1 -v /var/volume2 DATA busybox true

4
Bu, OP'nin peşinde olduğu şey değil. Bu, kapsayıcı içinde bir birim oluşturur ve bunu ana bilgisayara bağlamaz.
Ioannis

9
Haklısın, şöyle olmalı: docker run -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA busybox true
Joost van der Laan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.