Монтаж декількох томів на докер-контейнері?


152

Я знаю, що можу монтувати каталог у своєму хості на своєму контейнері, використовуючи щось подібне

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

Чи є спосіб створити більше однієї пари хост-контейнер? наприклад, відокремлений комою список або передати в масив?


наскільки я розумію поточний стан термінів документів, ви не можете встановити том (заголовок питання), ви, звичайно, можете мати багато прив'язки мостів до розміщення папок (саме про це запитують у тілі запитання)
Олексій Мартьянов

Відповіді:


260

Передайте кілька -vаргументів.

Наприклад:

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

2
Гаразд, тому я роблю це точно так само, але коли я намагаюся зателефонувати другий, він каже, що його не знайдено.
мама

docker run -v / home / usr / робоча область / proj / WebContent / файл / ім'я користувача: / mycode -v / home / usr / робоча область / proj / WebContent / файл: / tst gcc: 4.9 sh -c 'cd мій код; gcc -o myapp ./mycode.c; cd tst; ./myapp <./test.txt 'Це моя команда, я намагаюся скласти файл mycode.c, який знаходиться в першому томі, але надаю цьому ж файлу stdin з іншого тома. Як це зробити?
мама

1
@YehCheez, я (настійно) пропоную відкрити це як окреме питання та спробувати створити репродуктор. (Якщо ви могли б спростити помилку із зображенням Docker у публічному реєстрі та створити всі локальні залежності в сценарії, наведеному у запитанні, це було б ідеально).
Чарльз Даффі

Чи завжди потрібні абсолютні шляхи?
xatzistnr

3
Місце призначення завжди має бути абсолютним. Джерелом повинен бути або абсолютний шлях, або ідентифікатор для названого тома - див. Docs.docker.com/engine/admin/volumes/volumes для документів на останньому.
Чарльз Даффі

19

Зараз Docker рекомендує перейти до використання --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


6

Ви можете мати лише читання або читання та запис лише на гучності

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

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

1
який є типовим варіантом?
Хаммад Дар

-9

Або ви можете зробити

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

4
Це не те, що після ОП. Це створює об'єм всередині контейнера і не пов'язує його з хостом.
Іоанніс

8
Ви маєте рацію, повинні бути: docker run -v / var / volume1: / container / volume1 -v / var / volume2: / container / volume2 DATA busybox true
Joost van der Laan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.