Як встановити каталог хостів у контейнер Docker


618

Я намагаюся встановити каталог хостів у контейнер Docker, щоб будь-які оновлення, зроблені на хості, відображалися в контейнерах Docker.

Де я роблю щось не так. Ось що я зробив:

kishore$ cat Dockerfile

FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]

kishore$ tree
.
├── Dockerfile
└── main_folder
    ├── tfile1.txt
    ├── tfile2.txt
    ├── tfile3.txt
    └── tfile4.txt

1 directory, 5 files kishore$ pwd /Users/kishore/tdock

kishore$ docker build --tag=k3_s3:latest .

Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
 ---> 99ec81b80c55
Step 1 : RUN apt-get update
 ---> Using cache
 ---> 1c7282005040
Step 2 : RUN apt-get -y install git curl vim
 ---> Using cache
 ---> aed48634e300
Step 3 : CMD ["/bin/bash"]
 ---> Running in d081b576878d
 ---> 65db8df48595
Step 4 : WORKDIR /test_container
 ---> Running in 5b8d2ccd719d
 ---> 250369b30e1f
Step 5 : VOLUME ["/test_container"]
 ---> Running in 72ca332d9809
 ---> 163deb2b1bc5
Successfully built 163deb2b1bc5
Removing intermediate container b8bfcb071441
Removing intermediate container d081b576878d
Removing intermediate container 5b8d2ccd719d
Removing intermediate container 72ca332d9809

kishore$ docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest c9f9a7e09c54ee1c2cc966f15c963b4af320b5203b8c46689033c1ab8872a0ea

kishore$ docker run -i -t k3_s3:latest /bin/bash

root@0f17e2313a46:/test_container# ls -al
total 8
drwx------  2 root root 4096 Apr 29 05:15 .
drwxr-xr-x 66 root root 4096 Apr 29 05:15 ..

root@0f17e2313a46:/test_container# exit exit

kishore$ docker -v
Docker version 0.9.1, build 867b2a9

  • Я не знаю, як перевірити версію boot2docker

Питання, які стоять перед

  1. Як мені потрібно зв’язати головну папку з папкою test_container, присутньою в контейнері докера?
  2. Мені потрібно зробити це автоматично. Як мені це зробити, не використовуючи run -d -vкоманду?
  3. Що станеться, якщо boot2docker вийде з ладу? Де зберігаються файли Docker (крім Dockerfile)?

2
FYI, це, мабуть, зафіксовано в докер станом на цей коментар. Я використовую boot2docker на своєму Mac. Я можу використовувати опцію -v, і мій локальний каталог встановлюється повністю до контейнера.
Марко

Відповіді:


508

Є кілька способів зробити це. Найпростіший спосіб зробити це - скористатися командою dockerfile на ADDзразок:

ADD . /path/inside/docker/container

Однак будь-які зміни, внесені в цей каталог на хості після складання dockerfile, не відображатимуться в контейнері. Це тому, що будуючи контейнер, докер стискає каталог у a .tarта завантажує цей контекст у контейнер назавжди.

Другий спосіб зробити це так, як ви спробували, а це встановити гучність. Через намагання бути максимально портативним, ви не можете зіставити каталог хостів у каталог контейнерів docker в докер-файлі, оскільки каталог хостів може змінюватися залежно від того, на якій машині ви працюєте. Щоб зіставити каталог хостів у довіднику контейнерів docker, потрібно використовувати -vпрапор під час використання docker run так:

docker run -v /host/directory:/container/directory -other -options image_name command_to_run

Я спробував, як цей kishore $ docker -v / Користувачі / kishore / main_folder: / test_container Докер версія 0.9.1, побудувати 867b2a9 kishore $ docker run -v / Користувачі / kishore / main_folder: / test_container Використання: docker run [OPTIONS] IMAGE [ COMMAND] [ARG ...] Запустіть команду в новому контейнері -P, --publish-all = false: Опублікуйте всі відкриті порти в інтерфейсах хоста -a, --attach = []: Приєднати до stdin, stdout або stderr. -c, --cpu-share = 0: акції CPU (відносна вага)
Kishore Vaishnav

2
Ви можете мати як додавання. і -v кріплення гучності одночасно. використовуючи програму app_dir за замовчуванням, якщо не вказати кріплення хоста?
alexzg

@alexzg Я не думаю, що у нас може бути лише перша. Крім того, мені незрозуміло щодо вашого 2-го пункту за замовчуванням app_dir ... хост-хост ..?
Кішор Вайшнав

35
Це працювало для мене на mac os x з docker-машиною та VirtualBox. Одне застереження, яке я виявив методом проб і помилок, - це те, що до каталогу хостів має бути повний шлях, а не відносний шлях.
jbustamovej

25
ADDнасправді не "монтується", він копіює файл у контейнер, зберігаючи його всередині.
кев

200

Користувач цього питання використовував Docker version 0.9.1, build 867b2a9, я дам вам відповідь на версію докера> = 17.06.

Що ви хочете, щоб локальний каталог синхронізувався в каталозі контейнерів, виконується шляхом монтажу тома з типом bind. Це зв’яже джерела (вашу систему) та цільові (у контейнері докерів) каталоги. Це майже те саме, що встановлення каталогу на Linux.

Згідно з документацією Докера , тепер відповідна команда для монтажу тепер mountзамість -v. Ось його документація:

  • --mount: Складається з декількох пар ключ-значення, розділених комами. Кожна пара ключів / значень має форму <key>=<value>кортежу. --mountСинтаксис більш багатослівний , ніж -vабо --volume, але порядок ключів не має істотного значення, а значення прапора легше зрозуміти.

  • typeМонтування, яка може бути bind, volumeабоtmpfs . (Ми будемо використовувати bind )

  • The source кріплення. Для прив'язки кріплення - це шлях до файлу або каталогу на хості демона Docker. Може вказати як sourceабо src.

  • The destination якості значення приймає шлях, де файл або каталог буде встановлений у контейнері. Може бути вказано destination, dstчи target.

Отже, для монтажу поточного каталогу (джерела) з /test_container(target) ми будемо використовувати:

    docker run -it --mount src="$(pwd)",target=/test_container,type=bind k3_s3

Якщо у цих параметрах монтажу є пробіли, слід поставити лапки навколо них. Коли я знаю, що вони цього не роблять, я б використовував`pwd` замість цього :

    docker run -it --mount src=`pwd`,target=/test_container,type=bind k3_s3

Вам також доведеться мати справу з дозволом на файл, дивіться цю статтю .


2
Я upvoted своєї відповіді , тому що я люблю , як лаконічне це і не так, але ви можете оновити його трохи в світлі моєї відповіді на stackoverflow.com/a/51829247/901899
rainabba

2
Я думаю, що документація була оновлена ​​після цієї відповіді, тому що зараз, здається, рекомендується томи, а не монтажі. Варто хоч хоч це, перш ніж робити щось.
Шіпт

1
@Sipty може посилатися на таке: " Якщо ви розробляєте нові програми Docker, замість цього використовуйте названі томи . Ви не можете використовувати команди Docker CLI для прямого керування файлами прив'язки ".
Aluthren

81

2 послідовні кріплення: я думаю, що багато публікацій тут можуть використовувати два boot2docker, тому що ви нічого не бачите в тому, що ви монтуєте каталог з boot2docker, а не з вашого хоста.

В основному вам потрібні два послідовних кріплення:

Перший з них змонтував каталог з вашого хоста до вашої системи

другий, щоб змонтувати новий каталог з boot2docker у ваш контейнер так:

  • 1) Встановити локальну систему boot2docker

    sudo mount -t vboxsf hostfolder /boot2dockerfolder
    
  • 2) Встановити boot2dockerфайл на контейнер Linux

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    

Тоді, опинившись lsвсередині, containerfolderви побачите вміст свого hostfolder.


1
Найкраща відповідь. Я мушу додати, що (під windows) хост-папка в команді mount переходить до імені спільної папки. Той, що з’являється з net shareкомандою всередині терміналу Windows (cmd). І ви повинні додати цю папку як спільну папку з GUI virtualBox (використовуючи те саме ім'я, якщо ви дотримуєтесь моєї логіки). Якщо ви відмовитеся ним поділитися, це буде спрацьовувати, але ви зіткнетеся з проблемами з дозволами та оновленням вистави.
Кір Канос

як команда mount знає хост, де / boot2dockerfolder?
alfonsodev

Я отримав помилку: mount: unknown filesystem type 'vboxsf'за допомогою гостя ubuntu та хоста
nnyby

"vboxsf" - драйвер файлової системи "спільна папка" VirtualBox. Він повинен бути налаштований у VM, встановивши розширення VirtualBox. Зображення boot2docker не повинно бути встановлено. VirtualBox має функцію "пристрій" для "вставлення" ISO-зображень VirtualBox Additions як віртуальний об'єм. Зазвичай ви можете встановити це на mount, використовуючи mount / dev / cdrom / mnt, зайшовши в / mnt та запустивши bash VBoxLinuxAdditions. Може знадобитися встановлення залежностей gcc, ядра чи інших залежностей.
Ендрю Вулф

mount.vboxsf: монтаж не вдався з помилкою: Немає такого файлу чи каталогу каталогів: встановлення імені mymapfolder у / boot2dockerfolder не вдалося: Немає такого файлу чи каталогу
vee

71

Ви можете скористатися опцією -v від cli, цей об'єкт недоступний через Dockerfile

docker run -t -i -v <host_dir>:<container_dir> ubuntu /bin/bash

де host_dir - це каталог з хосту, який ви хочете встановити. вам не потрібно турбуватися про каталог контейнера, якщо його не існує, докер створить його.

Якщо ви зробите будь-які зміни в host_dir з хост-машини (під root привілеєм), вона буде видно контейнеру і навпаки.


6
Який приємний, чистий точний приклад для ілюстрації варіанту кріплення хоста. Це може бути покращено за допомогою реального каталогу: docker run -t -i -v /tmp:/tmp ubuntu /bin/bashде хост /tmpбуде встановлений на контейнер /tmp. Тепер можна touch /tmp/hello-worldз контейнера і побачити, як файл з'являється на хості.
Стефан Геннінгсен

3
Працює ідеально. Але встановлення цього способу встановлює власника каталогу як root, і це також очікує, що контейнер буде запущений як root. Як ми монтуємо dir як некоріозний, коли контейнер запускається як некорінний?
Арун

33

Можливо, ви використовуєте докер на OS X через boot2dockerабо щось подібне.

Я зробив той самий досвід - команда правильна, але все-таки нічого (розумного) не встановлено в контейнер.

Як виявляється - це вже пояснено в документації на докер . Коли ви набираєте , docker run -v /var/logs/on/host:/var/logs/in/container ...то /var/logs/on/hostнасправді відображений з boot2dockerVM-образу, а не ваш Mac.

Вам доведеться передавати спільну папку через свій VM вашому фактичному хосту (Mac у моєму випадку).


1
Дякую! Це допомогло мені з проблемою, що була віддаленою. Postgres, що працює всередині Docker, прив'язувався до IP VBox, а не до локального хосту, як це було б, якби не працювати на OS X.
Пітер Бечіч,

2
Ця URL-адреса докерівської документації вже не дійсна
digitaldavenyc

ха-ха, найкращий жарт коли-небудь .. вони дійсно могли б натякнути чи так.
користувач2834172

2
Ваше посилання на документацію - 404
Factor Mystic

3
Мені цікаво побачити приклад передачі спільної папки через VM фактичному хосту.
Дерек

28

[ОНОВЛЕННЯ] Станом на ~ червня 2017 року, Docker для Mac піклується про всі дратівливі частини цього місця, де вам доведеться возитися з VirtualBox. Це дозволяє в основному відображати все на локальному хості за допомогою /privateпрефікса. Більше інформації тут .[/ ОНОВЛЕННЯ]

Усі поточні відповіді говорять про Boot2docker. Оскільки це тепер застаріло на користь докер-машини, це працює для докер-машини:

Спочатку ssh у vm докер-машини і створимо папку, в яку будемо відображати:

docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""

Тепер поділіться папкою на VirtualBox:

WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient

Нарешті, знову вставте в докер-автомат і змонтуйте папку, яку ми тільки що поділили:

docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""

Примітка: для UID та GID ви можете в основному використовувати будь-які цілі числа, доки вони вже не взяті.

Це тестується як на докер-машині 0.4.1, так і на докер 1.8.3 на OS X El Capitan.


1
+1. Після декількох годин удару головою, ваша відповідь спрацювала. Це має бути частиною docker-machineдок.
Абхіджіт Саркар

Чому б не використати -vпрапор?
igracia

1
@igracia -vпрапор не працює так, як ви очікували в OS X (або windows). Docker працює у ВМ, тому папка, на яку посилається, -vвказує на папку в VM, а не в кореневій ОС. Цей прийом робить наступний крок зіставлення папки VM назад в кореневу ОС.
Патрік Гундерсон

1
@PatrickGunderson У моєму випадку (OS X) папка знаходиться в хості, а не в VM, і вона працює чудово. Компанія Docker Toll дбає про те, щоб експортувати її до VM, а звідти до контейнера.
igracia

1
Єдиним винятком із згаданого мною правила є те, що VM автоматично змонтується /Usersдля обміну на докер. Це означає, що якщо у ~/*вас є робочі файли, тоді ви готові йти. Якщо у вас буде налаштовано середовище для розробників, /developmentабо щось інше, ніж у /Usersвас, будуть проблеми docs.docker.com/engine/userguide/containers/dockervolumes
Патрік Гундерсон

27

Я просто експериментую з тим, щоб мій додаток SailsJS працював у контейнері Docker, щоб фізична машина була чистою.

Я використовую наступну команду для монтажу програми SailsJS / NodeJS під / app:

cd my_source_code_folder
docker run -it -p 1337: 1337 -v $ (pwd): / app my_docker / image_with_nodejs_etc

5
Як це можна зробити в Dockerfile?
орад

23
docker run -v /host/directory:/container/directory -t IMAGE-NAME /bin/bash

docker run -v /root/shareData:/home/shareData -t kylemanna/openvpn /bin/bash

У своїй системі я виправив відповідь з nhjk, вона працює бездоганно, коли ви додаєте -tпрапор.


Чи можете ви створити / оновити файли з локального FS і побачити зміни всередині контейнера докера?
Аві Мехенваль

14

Якщо хост - це вікно 10, то замість косої риски вперед слід використовувати зворотну косу рису -

docker run -it -p 12001:80 -v c:\Users\C\Desktop\dockerStorage:/root/sketches

Переконайтесь, що хост-диск є загальним (у цьому випадку C). У моєму випадку я отримав швидке запит на дозвіл на спільний доступ після запуску команди вище.


13

В Mac OS, щоб встановити папку /Users/<name>/projects/на вашому mac у корені контейнера:

docker run -it -v /Users/<name>/projects/:/projects <container_name> bash

ls /projects


11

Оновлення липня 2015 року - boot2docker тепер підтримує прямий монтаж. Ви можете використовувати -v /var/logs/on/host:/var/logs/in/containerпрямо з підказки Mac, без подвійного монтажу


11

Для користувачів Windows 10 важливо мати точку монтажу всередині C:/Users/каталогу. Я годинами намагався змусити це працювати. Ця публікація допомогла, але спочатку це було не очевидно, оскільки рішення для Windows 10 - це коментар до прийнятої відповіді. Ось як я це зробив:

docker run -it -p 12001:80 -v //c/Users/C/Desktop/dockerStorage:/root/sketches \
<your-image-here> /bin/bash

Потім, щоб перевірити це, ви можете зробити echo TEST > hostTest.txtвсередині свого зображення. Ви повинні мати можливість бачити цей новий файл у локальній папці хосту за адресою C:/Users/C/Desktop/dockerStorage/.


Подвійні косі риси на шляху - це те, що змусило мене працювати. Це було заплутано, тому що я використовував -v $(pwd):/var/xxспочатку і це робив роботу, але в результаті вийшов порожній каталог. Я запускаю цигу через бабун.
kenchilada

Була така ж проблема в Windows 7 під час використання / c / data /, переміщення каталогу хостів під / c / Users / <user> / вирішило його для мене. Дякую.
користувач8675309

1
чи можемо ми мати посилання на публікацію, яка допомогла вам вирішити проблему?
PBo

11

У мене було те саме питання. Мій командний рядок виглядав так:

docker run --rm -i --name $NAME -v `pwd`:/sources:z $NAME

Проблема була з 'pwd'. Тому я змінив це на $ (pwd):

docker run --rm -i --name $NAME -v $(pwd):/sources:z $NAME

1
Для чого це z?
hhh

2
Параметр z вказує, що вміст монтажу прив'язки поділяється між декількома контейнерами.
Джейсон

10

Станом на Docker 18-CE, ви можете використовувати docker run -v /src/path:/container/pathдвостороння прив'язка хостової папки.

Тут є основна уловка, хоча якщо ви працюєте з Windows 10 / WSL і маєте Docker-CE для Windows як свого хоста, а потім клієнтські інструменти docker-ce у WSL. WSL знає про всю / файлову систему, тоді як ваш хост Windows знає лише про ваші диски. Всередині WSL ви можете використовувати / mnt / c / projectpath, але якщо ви спробуєте docker run -v ${PWD}:/projectpath, ви знайдете в хості, що / projectpath / порожній, оскільки на хості / mnt нічого не означає.

Якщо ви працюєте з / c / projectpath, хоча і ТОГО зробите, docker run -v ${PWD}:/projectpathі ви знайдете, що в контейнері / projectpath відображатиме / c / projectpath в режимі реального часу. Немає помилок чи будь-яких інших способів виявити цю проблему, окрім того, як бачити порожні кріплення у вашого гостя.

Ви також повинні бути впевнені, що "поділитися диском" у налаштуваннях Docker для Windows.


У мене є ця проблема з Win10 / WSL та Docker-CE / docker-ce. Порожній / проектний шлях /. Що ви маєте на увазі під "роботою з / c / projectpath"? Я спробував зв’язати / c / to / mnt / c і працює від, /c/projectpathале тоді я отримую помилку bind mount source path does not exist: /host_mnt/c/projectpath.
Стівен Т. Снайдер

Це посилання вирішило мою проблему: support.divio.com/local-development/docker/… (Докер у Windows дозволяє встановлювати лише з / Користувачі / за замовчуванням)
Стівен Т. Снайдер

7

Я виявив , що будь-який каталог прокладки в відповідно з директивою системи , як /var, /usr, /etcне може бути кріплення в контейнері.

Директива повинна бути в просторі -vкомутатора користувача, вказує демон-докеру монтувати локальний каталог до контейнера, наприклад:

docker run -t -d -v /{local}/{path}:/{container}/{path} --name {container_name} {imagename}

5

boot2docker разом з додатками для гостей VirtualBox
Як встановити / Користувачів у boot2docker

https://medium.com/boot2docker-lightweight-linux-for-docker/boot2docker-together-with-virtualbox-guest-additions-da1e3ab2465c

tl; dr. Створіть свій власний boot2docker.iso за допомогою гостьових доповнень VirtualBox (див. посилання ) або завантажте http://static.dockerfiles.io/boot2docker-v1.0.1-virtualbox-guest-additions-v4.3.12.iso та збережіть його до ~ / .boot2docker / boot2docker.iso.


Я спробував використовувати цей iso, і я все-таки зіткнувся з тими ж проблемами ... Використання вказівок, викладених у цій публікації, допомогло мені розібратися, хоча - я в основному мусив примусити загальну папку.
Яко Преторій

Я використав iso, він натрапив на те, що я не зупиняв віртуальну коробку віртуального вікна перед тим, як викликати cmd "VBoxManage shared folder add ...". Врешті-решт, це все працювало, хоча й величезна подяка.
Еміль

Примітка: причина -v arg не працює через boot2docker, мабуть, щось пов'язане з монтажем до boot2docker-vm, а не з вашим фактичним хостом. саме тому я здогадуюсь, що частина Vboxmanage допомагає їй працювати.
Еміль

5

Як з'єднати папку main_folder з папкою test_container, присутньою в контейнері docker?

Ваша команда нижче правильна, якщо ви не працюєте на mac, використовуючи boot2docker (залежно від майбутніх оновлень), у цьому випадку папка може бути порожньою. Дивіться матову відповідь для підручника з виправлення цього.

docker run -d -v /Users/kishore/main_folder:/test_container k3_s3:latest

Мені потрібно зробити цей запуск автоматично, як це зробити, не використовуючи команду run -d -v.

Дійсно не вдається відволіктися від використання цих команд, вони сутнісні тому, як працює докер. Вам найкраще буде вводити їх у сценарій оболонки, щоб заощадити їх виписувати їх неодноразово.

Що станеться, якщо збої завантажувача boot2docker? Де зберігаються докерські файли?

Якщо вам вдасться використовувати -v arg і посилатися на ваш хост-апарат, то файли будуть безпечними для вашого хоста.

Якщо ви використовували "docker build -t myimage". з Dockerfile, тоді ваші файли будуть виведені на зображення.

Ваші зображення докера, я вважаю, зберігаються у boot2docker-vm. Я дізнався це, коли мої зображення зникли, коли я видаляю vm з VirtualBox. (Зверніть увагу, я не знаю, як працює Virtualbox, тому зображення все ще можуть бути приховані деінде, просто не видно докеру).


5

Була така ж проблема. Знайдено це в документації докера :

Примітка. Каталог хостів за своєю природою залежить від хоста. З цієї причини ви не можете встановити каталог хостів з Dockerfile, інструкція VOLUME не підтримує передачу хосту-dir, оскільки вбудовані зображення повинні бути портативними. Каталог хостів буде доступний не для всіх потенційних хостів.

Отже, встановлення каталогу хостів читання / запису можливе лише за допомогою -vпараметра в docker runкоманді, як інші відповіді вказують правильно.


Що таке саме каталог хостів?
Nicolas S.Xu

@ NicolasS.Xu Будь-який шлях на фактичній хост-машині докера.
Дж. Скотт Елблін

5

Ось приклад зі шляху до Windows:

docker run -P -it --name organizr --mount src="/c/Users/MyUserName/AppData/Roaming/DockerConfigs/Organizr",dst=/config,type=bind organizrtools/organizr-v2:latest

Як бічна зауваження, під час усього цього витягання волосся, змушеного боротися з з'ясуванням і переробляти контури знову і знову, я вирішив піднести невеликий AutoHotkeyсценарій, щоб перетворити шлях Windows до форматованого шляху "Docker Windows ". . Таким чином, все, що мені потрібно зробити, - це скопіювати будь-який шлях Windows, який я хочу використовувати в якості точки монтажу до буфера обміну, натиснути «Клавішу програми» на клавіатурі, і він відформатує його у форматі шляху, який Docker цінує.

Наприклад:

Скопіюйте це у буфер обміну:

C:\Users\My PC\AppData\Roaming\DockerConfigs\Organizr

натисніть, Apps Keyпоки курсор знаходиться там, де ви хочете, його в командному рядку, і він вставить це туди:

"/c/Users/My PC/AppData/Roaming/DockerConfigs/Organizr"

Економить багато часу для мене. Ось він для всіх, хто може вважати його корисним.

; --------------------------------------------------------------------------------------------------------------
;
; Docker Utility: Convert a Windows Formatted Path to a Docker Formatter Path
;                   Useful for (example) when mounting Windows volumes via the command-line.
;
; By:       J. Scott Elblein
; Version:  1.0
; Date:     2/5/2019
;
; Usage:    Cut or Copy the Windows formatted path to the clipboard, press the AppsKey on your keyboard
;           (usually right next to the Windows Key), it'll format it into a 'docker path' and enter it
;           into the active window. Easy example usage would be to copy your intended volume path via
;           Explorer, place the cursor after the "-v" in your Docker command, press the Apps Key and
;           then it'll place the formatted path onto the line for you.
;
; TODO::    I may or may not add anything to this depending on needs. Some ideas are:
;           
;           - Add a tray menu with the ability to do some things, like just replace the unformatted path
;               on the clipboard with the formatted one rather than enter it automatically.
;           - Add 'smarter' handling so the it first confirms that the clipboard text is even a path in
;               the first place. (would need to be able to handle Win + Mac + Linux)
;           - Add command-line handling so the script doesn't need to always be in the tray, you could
;               just pass the Windows path to the script, have it format it, then paste and close.
;               Also, could have it just check for a path on the clipboard upon script startup, if found
;               do it's job, then exit the script.
;           - Add an 'all-in-one' action, to copy the selected Windows path, and then output the result.
;           - Whatever else comes to mind.
;
; --------------------------------------------------------------------------------------------------------------

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%

AppsKey::

    ; Create a new var, store the current clipboard contents (should be a Windows path)
    NewStr := Clipboard

    ; Rip out the first 2 chars (should be a drive letter and colon) & convert the letter to lowercase
    ; NOTE: I could probably replace the following 3 lines with a regexreplace, but atm I'm lazy and in a rush.
    tmpVar := SubStr(NewStr, 1, 2)
    StringLower, tmpVar, tmpVar

    ; Replace the uppercase drive letter and colon with the lowercase drive letter and colon
    NewStr := StrReplace(NewStr, SubStr(NewStr, 1, 2), tmpVar)

    ; Replace backslashes with forward slashes
    NewStr := StrReplace(NewStr,  "\", "/")

    ; Replace all colons with nothing
    NewStr := StrReplace(NewStr, ":", "")

    ; Remove the last char if it's a trailing forward slash
    NewStr :=  RegExReplace(NewStr, "/$")

    ; Append a leading forward slash if not already there
    if RegExMatch(NewStr, "^/") == 0
        NewStr :=  "/" . NewStr

    ; If there are any spaces in the path ... wrap in double quotes
    if RegExMatch(NewStr, " ") > 0
        NewStr :=  """" . NewStr . """"

    ; Send the result to the active window
    SendInput % NewStr 

4

Для того, щоб це працювало в Windows 10, мені довелося відкрити вікно параметрів Docker з системного трея та перейти до розділу « Загальні диски» .

Потім я встановив прапорець поруч C. Docker попросив мої облікові дані на робочому столі, щоб отримати дозвіл на запис у мою папку Users.

Потім я запустив контейнер докера за наступними прикладами, а також прикладом на цій сторінці налаштувань, приєднавшись до /dataцього контейнера.

docker run -v c:/Users/<user.name>/Desktop/dockerStorage:/data -other -options

3

Зауважте, що в Windows вам доведеться надати абсолютний шлях.

Нижче працював для мене.

docker run -t -i -v D:/projects/:/home/chankeypathak/work -p 8888:8888 jupyter/tensorflow-notebook /bin/bash

3

У мене були ті ж проблеми, я намагався встановити папку C: \ Users \ на докер
як я це зробив командний рядок Docker Toolbox

 $ docker run -it --name <containername> -v /c/Users:/myVolData <imagename>

2

У мене була однакова вимога монтувати каталог хостів з контейнера, і я використовував команду mount volume. Але під час тестування помітили, що це також створює файли всередині контейнера, але після деякого копання виявило, що вони є лише символічними посиланнями та фактичною файловою системою, що використовується формою хост-машини.


2

Ви також можете зробити це за допомогою веб-програми Portainer для іншого візуального досвіду.

Спочатку витягніть зображення Portainer:

docker pull portainer/portainer

Потім створіть том для Portainer:

docker volume create portainer_data

Також створіть контейнер Portainer:

docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Ви зможете отримати доступ до веб-програми за допомогою свого браузера за цією URL-адресою: " http: // localhost: 9000 ". Під час першого входу вам буде запропоновано встановити облікові дані адміністратора Portainer.

У веб-додатку дотримуйтесь цих меню та кнопок: (Контейнер> Додати контейнер> Налаштування заповнення > Розгорнути контейнер)

У мене виникли проблеми створити "mount" том з Portainer, і я зрозумів, що мені потрібно натиснути "прив'язати" під час створення об'єму мого контейнера. Нижче наведено ілюстрацію параметрів прив'язки об’єму, які працювали на моєму створенні контейнера із змонтованим томом, прив’язаним до хоста.

налаштування прив’язки гучності

PS: Я використовую Docker 19.035 та Portainer 1.23.1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.