Как использовать опцию --volume с Docker Toolbox в Windows?


Как я могу совместно использовать папку между моими файлами Windows и контейнером docker, монтируя том с помощью простой команды --volume с помощью Docker Toolbox on?

Я использую "Docker Quickstart Terminal" и когда я пытаюсь это сделать:

winpty docker run -it --rm --volume /C/Users/myuser:/myuser ubuntu

У меня есть такая ошибка:

Invalid value "C:\Users\myuser\:\myuser" for flag --volume: bad mount mode specified : myuser
See 'docker run --help'.

Следуя этому , я также попробовал

winpty docker run -it --rm --volume "//C/Users/myuser:/myuser" ubuntu

И получил

Invalid value "\\C:\Users\myuser\:\myuser" for flag --volume: myuser is not an absolute path
See 'docker run --help'.
7 29

7 ответов:

Это улучшение выбранного ответа, потому что этот ответ ограничен c:\Users папка. Если вы хотите создать том, используя каталог за пределами c:\Users это расширение.

В windows 7 я использовал Docker toolbox. Он использовал виртуальный ящик.

  1. открыть виртуальный ящик
  2. выберите машину (в моем случае по умолчанию).
  3. щелкните правой кнопкой мыши и выберите пункт Настройки
  4. перейти к общим папкам
  5. включите новую машинную папку.

Например, в моем случае я включил:

**Name**: c:\dev
**Path**: c/dev
  1. нажмите и закройте
  2. откройте "Docker Quickstart Terminal"и перезагрузите компьютер docker.

Используйте следующую команду:

$ docker-machine restart
Чтобы убедиться, что он работает, выполните следующие действия:
  1. SSH на докер-машину.

Используя эту команду:

$ docker-machine ssh
  1. перейдите в папку, к которой вы подключили общий доступ.

В моем случае я использую это команда

$ cd /c/dev
  1. Проверьте владельца папки пользователя. Вы можете использовать "ls-all" и проверить, что владельцем будет "docker"

Вы увидите примерно следующее:

docker@default:/c/dev$ ls -all
total 92
drwxrwxrwx    1 docker   staff         4096 Feb 23 14:16 ./
drwxr-xr-x    4 root     root            80 Feb 24 09:01 ../
drwxrwxrwx    1 docker   staff         4096 Jan 16 09:28 my_folder/

В этом случае вы сможете создать том для этой папки.

Вы можете использовать следующие команды:

docker create -v /c/dev/:/app/dev --name dev image
docker run -d -it --volumes-from dev image

Или

docker run -d -it -v /c/dev/:/app/dev image

Обе команды работают на меня. Надеюсь, это будет полезно.

Это фактически проблема проекта и есть 2 рабочих обходных пути:

  1. Создание тома данных:

    docker create -v //c/Users/myuser:/myuser --name data hello-world
    winpty docker run -it --rm --volumes-from data ubuntu
    
  2. Сшивание непосредственно в Хосте docker:

    docker-machine ssh default
    

    И оттуда делаем классику:

    docker run -it --rm --volume /c/Users/myuser:/myuser ubuntu
    

С августа 2016 года Docker для windows теперь использует hyper-v напрямую вместо virtualbox, поэтому я думаю, что это немного отличается. Сначала разделите диск в настройках, затем используйте формат C: букв диска, но используйте прямые косые черты. Например, я создал каталог H:\t\REDIS и смог увидеть его смонтированным на /data в контейнере с помощью следующей команды:

docker run -it --rm -v h:/t/REDIS:/data redis sh

Тот же формат, используя букву диска и двоеточие, а затем прямые косые черты для разделителя путей работал как из командной строки windows и с помощью Git Баш.

Я нашел этот вопрос в Гугле, чтобы найти ответ, но я не мог найти ничего, что работало. Казалось бы, все работает без ошибок, но я просто не мог видеть данные на хосте (или наоборот). Наконец я внимательно проверил настройки и попробовал формат, который они показывают:

Введите описание изображения здесь

Итак, сначала вы должны поделиться всем диском с виртуальной машиной docker в настройках здесь, я думаю, что это дает виртуальную машину "docker-machine", работающую в hyper-v доступ к этому диску. Затем вы должны использовать формат, показанный здесь, который, кажется, существует только на этом изображении и ни в одной документации или вопросах, которые я мог бы найти в интернете:

docker run --rm -v c:/Users:/data alpine ls /data

Попробуйте это:

  1. Откройте Docker Quickstart Terminal . Если он уже открыт, запустите $ cd ~, чтобы убедиться, что вы находитесь в каталоге пользователей Windows.
  2. $ docker run -it -v /$(pwd)/ubuntu:/windows ubuntu

Он будет работать, если ошибка вызвана опечаткой. Вы получите пустую папку с именем ubuntu в вашем каталоге пользователя. Вы увидите эту папку с именем windows в вашем контейнере ubuntu.

Для тех, кто использует виртуальный ящик , кто предпочитает подход командной строки

1) Убедитесь, что докер-машина не запущена

Docker Quickstart Terminal:

docker-machine stop

2) Создайте окно общего доступа docker-machine

Командная строка Windows:
(Измените следующее, чтобы соответствовать вашему сценарию. Я загружаю свой контейнер Apache httpd из каталога, синхронизированного через Dropbox.)

set VBOX=D:\Program Files\Oracle\VirtualBox\VBoxManage.exe
set VM_NAME=default
set NAME=c/htdocs
set HOSTPATH=%DROPBOX%\htdocs
"%VBOX%" sharedfolder add "%VM_NAME%" --name "%NAME%" --hostpath "%HOSTPATH%" --automount

3) запустите докер-машину и установите том в новый контейнер

Терминал Быстрого Запуска Docker:
(Опять же, я запускаю контейнер Apache httpd, следовательно, этот порт открыт.)

docker-machine start
docker run -d --name my-apache-container-0 -p 80:80 -v /c/htdocs:/usr/local/apache2/htdocs my-apache-image:1.0

Если вы ищете решение, которое разрешит все проблемы Windows и заставит его работать на операционной системе Windows так же, как и на Linux, то смотрите ниже. Я проверил это, и это работает во всех случаях. Я также показываю, как я его получаю (шаги и мыслительный процесс).

Решение 1: Используйте VirtualBox (если вы считаете, что это не очень хорошая идея, смотрите решение 2 ниже)

  • Откройте VirtualBox (он уже установлен вместе с инструментами docker)
  • создать виртуальную машину с вторая карта ethernet-Мостовая, таким образом, она получит IP-адрес из вашей сети (у нее будет IP, как у docker machine)
  • Установите Ubuntu LTS, который старше 1 года
  • Установить докер
  • Добавьте общие каталоги в виртуальную машину и автомонтируйте каталоги проекта (таким образом, вы получите доступ к каталогу проекта из Ubuntu) , но все еще можете работать в Windows
  • сделано

Бонус:

  • все работает так же, как и на Linux
  • приостанавливайте / отключайте докеризованную среду всякий раз, когда вы хотите

Решение 2: Используйте VirtualBox (это очень похоже на решение 1, но оно также показывает процесс мышления, который может быть полезен при решении подобных проблем)

  • прочитайте, что кто-то перемещает папки в /C / Users / Public, и это работает https://forums.docker.com/t/sharing-a-volume-on-windows-with-docker-toolbox/4953/2
  • попробуйте, поймите, что в этом нет особого смысла. ваш случай.
  • прочитайте всю страницу здесь https://github.com/docker/toolbox/issues/607 и попробуйте все решения, перечисленные на странице
  • Найдите эту страницу (ту, которую вы сейчас читаете) и попробуйте все решения из других комментариев
  • Найдите где-нибудь информацию о том, что установка переменной окружения COMPOSE_CONVERT_WINDOWS_PATHS=1 может решить проблему.
  • прекратите искать решение в течение нескольких месяцев
  • вернитесь назад и проверьте те же ссылки еще раз
  • плачь глубоко
  • почувствуйте момент просветления
  • Откройте VirtualBox (он уже установлен вместе с инструментами docker)
  • создайте виртуальную машину со второй картой ethernet-мостом, таким образом, она получит IP-адрес из вашей сети (у нее будет IP, как у docker machine)
  • Установите Ubuntu LTS, который совсем недавно (не старше нескольких месяцев)
  • Обратите внимание, что автомонтирование на самом деле не работает, и интеграция нарушена (например, обмен буфером обмена и т.д.)
  • удалить виртуальную машину
  • выйди и выпей
  • Возьмите напрокат дорогой автомобиль и поезжайте с большой скоростью по шоссе
  • уничтожьте машину и умрите
  • респаун перед вашим ПК
  • Установите Ubuntu LTS, который старше 1 года
  • попробуйте запустить docker
  • Обратите внимание, что он не установлен
  • Install docker by apt-get install docker
  • рекомендуется установить docker.io
  • попробуйте запустить docker-compose
  • Обратите внимание, что это не так. установлено
  • apt get install docker-compose
  • попробуйте запустить свой проект с помощью docker-compose
  • Обратите внимание, что это старая версия
  • Проверьте уровень мощности (он должен быть более 9000)
  • Поиск как установить последнюю версию docker и найти официальное руководство https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • удалите текущий docker-compose и docker.io
  • Установка docker с помощью официального руководства https://docs.docker.com/install/linux/docker-ce/ubuntu/
  • Добавьте общие каталоги в виртуальную машину и автомонтируйте каталоги проекта (таким образом, у вас есть доступ к каталогу проекта из Ubuntu, так что вы можете запустить любую команду docker)
  • сделано

Я решил ее!

Добавить объем:

Докер запустить -Д -в моих-по имени-Тома:c:\MyNamedVolume testimage:последний

Смонтировать каталог хоста:

Docker run-d-v C:\Temp\123:C:\My\Shared\Dir отзыв: последний