Как использовать параметр --volume с Docker Toolbox в Windows?
Как я могу разделить папку между моими файлами Windows и док-контейнером, подключив том с помощью простого --volume
команда с использованием Docker Toolbox на?
Я использую "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 ответов
Это на самом деле проблема проекта, и есть 2 рабочих обходных пути:
Создание объема данных:
docker create -v //c/Users/myuser:/myuser --name data hello-world winpty docker run -it --rm --volumes-from data ubuntu
SSHing прямо в хосте докера:
docker-machine ssh default
И оттуда делаем классику:
docker run -it --rm --volume /c/Users/myuser:/myuser ubuntu
Это улучшение выбранного ответа, поскольку этот ответ ограничен папкой c:\Users. Если вы хотите создать том, используя каталог за пределами c:\Users, это расширение.
В Windows 7 я использовал панель инструментов Docker. Он использовал Virtual Box.
- Открыть виртуальную коробку
- Выберите машину (в моем случае по умолчанию).
- Щелкните правой кнопкой мыши и выберите параметр настройки
- Перейти к общим папкам
- Включите новую папку машины.
Например, в моем случае я включил:
**Name**: c:\dev
**Path**: c/dev
- Нажмите и закройте
- Откройте "Docker Quickstart Terminal" и перезапустите докер.
Используйте эту команду:
$ docker-machine restart
Чтобы убедиться, что это работает, выполните следующие действия:
- SSH к докеру
Используя эту команду:
$ docker-machine ssh
- Перейдите в папку, которой вы поделились / смонтировали.
В моем случае я использую эту команду
$ cd /c/dev
- Проверьте пользователя владельца папки. Вы можете использовать "ls -all" и убедиться, что владельцем будет "докер"
Вы увидите что-то вроде этого:
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
У меня обе команды работают. Я надеюсь, что это будет полезно.
Если вы ищете решение, которое решит все проблемы Windows и заставит его работать в ОС Windows так же, как в Linux, то смотрите ниже. Я проверил это, и это работает во всех случаях. Я также показываю, как я это понимаю (шаги и процесс мышления).
Решение 1. Используйте VirtualBox (если вы считаете, что это не очень хорошая идея, см. Решение 2 ниже)
- Откройте VirtualBox (он уже установлен вместе с инструментами докера)
- Создайте виртуальную машину со второй сетевой картой, соединенной мостом, таким образом она получит IP-адрес из вашей сети (у него будет IP, как у докера)
- Установите 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 (он уже установлен вместе с инструментами докера)
- Создайте виртуальную машину со второй сетевой картой, соединенной мостом, таким образом она получит IP-адрес из вашей сети (у него будет IP, как у докера)
- Установите Ubuntu LTS, который установлен совсем недавно (не старше нескольких месяцев)
- Обратите внимание, что автомонтирование на самом деле не работает, а интеграция нарушена (например, совместное использование буфера обмена и т. Д.)
- Удалить виртуальную машину
- Выйди и выпей
- Арендуй дорогой автомобиль и езжай с большой скоростью по шоссе
- Уничтожь машину и умри
- Возрождение перед вашим ПК
- Установите Ubuntu LTS старше 1 года
- Попробуй запустить докер
- Обратите внимание, это не установлено
- Установите docker с помощью 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
- Установите докер используя официальное руководство https://docs.docker.com/install/linux/docker-ce/ubuntu/
- Добавьте общие каталоги на виртуальную машину и автоматически смонтируйте каталоги вашего проекта (таким образом, у вас есть доступ к каталогу проекта из Ubuntu, так что вы можете запустить любую команду docker)
- Готово
Просто использование двойных наклонных черт коснулось меня в Windows 7:
docker run --rm -v //c/Users:/data alpine ls /data/
Взято отсюда: https://github.com/moby/moby/issues/12590
С августа 2016 года Docker для Windows теперь использует Hyper-V напрямую, а не VirtualBox, так что я думаю, что это немного по-другому. Сначала поделитесь диском в настройках, затем используйте C:
формат буквы диска, но используйте косую черту. Например, я создал H:\t\REDIS
каталог и смог увидеть его смонтирован на /data
в контейнере с этой командой:
docker run -it --rm -v h:/t/REDIS:/data redis sh
Тот же формат, использующий букву диска и двоеточие, затем прямую косую черту для разделителя пути, работал как из командной строки Windows, так и из git bash.
Я нашел этот вопрос, гуглял, чтобы найти ответ, но я не мог найти ничего, что сработало. Казалось бы, все работает без ошибок, но я просто не могу видеть данные на хосте (или наоборот). Наконец я внимательно проверил настройки и попробовал формат, который они показывают:
Итак, во-первых, вы должны предоставить общий доступ к диску в виртуальной машине в настройках здесь, я думаю, что это дает виртуальной машине "докер-машина", работающей в hyper-v, доступ к этому диску. Затем вы должны использовать формат, показанный там, который, кажется, существует только на этом одном изображении и не содержит никакой документации или вопросов, которые я мог бы найти в Интернете:
docker run --rm -v c:/Users:/data alpine ls /data
Попробуй это:
- Откройте Docker Quickstart Terminal. Если он уже открыт, запустите
$ cd ~
чтобы убедиться, что вы находитесь в каталоге пользователя Windows. $ docker run -it -v /$(pwd)/ubuntu:/windows ubuntu
Это будет работать, если ошибка связана с опечаткой. Вы получите пустую папку с именем ubuntu
в вашем пользовательском каталоге. Вы увидите эту папку с именем windows
в вашем контейнере Ubuntu.
Для тех, кто использует Virtual Box, кто предпочитает подход командной строки
1) Убедитесь, что докер-машина не работает
Docker Quickstart Terminal:
docker-machine stop
2) Создайте общий Windows <-> докер-машину
Командная строка 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 Quickstart Terminal:
(Опять же, я запускаю контейнер 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
Расшарить папки virtualBox toolbox и windows 7 и контейнер изображений nodejs
используя... Docker Quickstart Terminal [QST] Проводник Windows [WE]
Давайте начнем...
[QST] открыть Docker Quickstart Terminal
[QST] остановка виртуальной машины
$ docker-machine stop
[WE] открыть проводник
[WE] перейти в каталог установки virtualBox
[WE] открыть cmd и выполнить...
C: \ Program Files \ Oracle \ VirtualBox> Общая папка VBoxManage добавляет "default" --name "/d/SVN_FOLDERS/X2R2_WP6/nodejs" --hostpath "\?\ D:\SVN_FOLDERS\X2R2_WP6\nodejs" --automount
проверьте в виртуальной машине оракула, что новая общая папка появилась
[QST] запуск виртуальной машины
$ docker-machine start
- [QST] запустить контейнер nodejs
Docker Stop Nodejs
Docker Rm Nodejs
docker run -d -it --rm --name имя_узла -v / d / SVN_FOLDERS / X2R2_WP6 / nodejs: / usr / src / app -w / usr / src / app node2
- [QST] открыть bash для контейнера
docker exec -i -t nodejs / bin / bash
- [QST] выполните dir, и вы увидите общие файлы
Я решил это!
Добавить том:
Окно запуска -d -v my-named-volume:C:\MyNamedVolume свидетельство: последнее
Смонтируйте каталог хоста:
Docker запускает -d -v C:\Temp\123:C:\My\Shared\Dir свидетельство: последнее