ติดตั้งหลายวอลุ่มบนคอนเทนเนอร์นักเทียบท่าหรือไม่?


152

ฉันรู้ว่าฉันสามารถติดตั้งไดเรกทอรีในโฮสต์ของฉันบนภาชนะของฉันโดยใช้สิ่งที่ชอบ

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

มีวิธีการสร้างมากกว่าหนึ่งคู่โฮสต์คอนเทนเนอร์หรือไม่? เช่นรายการที่คั่นด้วยเครื่องหมายจุลภาคหรือส่งผ่านอาร์เรย์?


ตามที่ฉันเข้าใจสถานะปัจจุบันของคำว่าเอกสารคุณไม่สามารถเมานต์โวลุ่ม (ชื่อคำถาม) คุณสามารถมีการเชื่อมโยงหลายอย่างเข้ากับโฟลเดอร์โฮสต์ได้ (นั่นคือสิ่งที่ถูกถามในเนื้อความของคำถาม)
Alexei Martianov

คำตอบ:


260

ผ่านการ-vขัดแย้งกันหลายครั้ง

ตัวอย่างเช่น

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

2
โอเคดังนั้นฉันกำลังทำสิ่งนี้แบบเดียวกัน แต่เมื่อฉันลองโทรที่สองมันบอกว่าไม่พบ
momal

นักเทียบท่า run -v / home / usr / workspace / proj / WebContent / ไฟล์ / ชื่อผู้ใช้: / mycode -v / home / usr / workspace / proj / WebContent / ไฟล์: / tst gcc: 4.9 sh -c 'cd mycode; gcc -o myapp ./mycode.c; cd tst; ./myapp <./test.txt 'นี่คือคำสั่งของฉันฉันกำลังพยายามรวบรวม mycode.c ที่อยู่ในโวลุ่มแรก แต่ให้ stdin เดียวกันกับไฟล์เดียวกันจากโวลุ่มอื่น ฉันต้องทำอย่างไร?
momal

1
@YeChCheez ฉันอยากจะขอแนะนำให้เปิดเป็นคำถามที่แยกต่างหากและพยายามที่จะสร้างสำเนา (หากคุณสามารถทำซ้ำข้อบกพร่องด้วยภาพ Docker ในการลงทะเบียนสาธารณะและสร้างการพึ่งพาในท้องถิ่นทั้งหมดในสคริปต์ที่กำหนดในคำถามซึ่งจะเหมาะอย่างยิ่ง)
ชาร์ลส์ดัฟฟี่

มันต้องการเส้นทางที่แน่นอนเสมอหรือไม่?
xatzistnr

3
ปลายทางต้องเป็นแบบสัมบูรณ์เสมอ แหล่งที่มาต้องเป็นพา ธ สัมบูรณ์หรือตัวระบุสำหรับโวลุ่มที่มีชื่อ - ดูdocs.docker.com/engine/admin/volumes/volumesสำหรับเอกสารในภายหลัง
ชาร์ลส์ดัฟฟี่

19

--mountเทียบท่านี้แนะนำการโยกย้ายไปสู่การใช้

รายละเอียดการเมานต์หลายตัวยังมีการอธิบายรายละเอียดในเอกสารประกอบ Docker ปัจจุบัน

จาก: 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

คำตอบเดิมที่เก่ากว่าควรยังใช้ได้อยู่ เพียงแค่พยายามรักษาคำตอบให้สอดคล้องกับวิธีที่รู้จักกันดีในปัจจุบัน


มีมูลค่าเพิ่มเหตุผลเดียวที่นักเทียบท่าแนะนำให้ทำการโยกย้ายเพราะการวิจัยแสดงให้เห็นว่า - เมานต์ใช้งานง่ายกว่าและมีตัวเลือกเพิ่มเติม การใช้ -v หรือ --mount นั้นดีมากนี่เป็นความต้องการและความต้องการส่วนตัวของคุณ
KillerKode

18

คุณสามารถใช้-vตัวเลือกหลาย ๆ ครั้งในdocker runคำสั่งเพื่อติดตั้งหลายไดเรกทอรีในคอนเทนเนอร์:

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

1
สิ่งนี้เพิ่มสิ่งใด ๆ ลงในคำตอบก่อนหน้านี้ที่ให้ผลแบบเดียวกันหรือไม่?
Charles Duffy

6

คุณสามารถมีอ่านอย่างเดียวหรืออ่านและเขียนเท่านั้นในระดับเสียง

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

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

1
ตัวเลือกใดเป็นตัวเลือกเริ่มต้น
Hammad Dar

-9

หรือคุณสามารถทำได้

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

4
นี่ไม่ใช่สิ่งที่ OP จะดำเนินการ สิ่งนี้สร้างไดรฟ์ข้อมูลภายในคอนเทนเนอร์และไม่ผูกกับโฮสต์
Ioannis

8
คุณถูกต้องควรเป็น: นักเทียบท่าเรียกใช้ -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA busybox จริง
Joost van der Laan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.