Почему / host_mt / требуется при использовании томов монтирования в Windows - PullRequest
2 голосов
/ 16 февраля 2020

У меня следующая ситуация: я хочу создать связывающее монтирование, которое инициализируется на основе содержимого docker образа.

В MacOS я могу сделать следующее, чтобы выполнить sh this:

  1. Создание тома: docker volume create --opt type=none --opt device=%(pwd)/data_dir --opt o=bind --name data_volume
  2. Runt контейнер с томом: docker run -v data_volume:/home

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

На Windows 10, однако, я могу сделать следующее: docker run -v %cd%/data_dir:/home. Это эквивалентно описанию MacOS, но не использует том (er go он инициализируется с пустым каталогом data_dir). Однако это показывает, что Docker понимает текущее монтирование привязки.

Когда я создаю том с помощью шагов, описанных для MacOS, я получаю следующую ошибку:

Ошибка ответа от демона : не удалось подключить локальный том: mount c: / some-path / data_dir: / var / lib / docker / volume / data_volume / _data, флаги: 0x1000: нет такого файла или каталога.

Проверка контейнера, используемого без использования тома docker, дает следующие настройки:

...
"Mounts": [
   {
      "Type": "bind",
      "Source": "/host_mnt/c/some-path/data_dir",
      "Destination": "/home,
      "Mode": "",
      "RW": true,
      "Propagation": "rprivate"
   }
],
...

Поэтому, если я изменю громкость на: docker volume create --driver local -o o=bind -o type=none -o device=/host_mnt/c/some-path/data_dir data_volume

Это работает. Почему для Windows используется префикс /host_mnt/ при создании тома, но не при запуске контейнера и непосредственном монтировании привязки (без docker тома).

1 Ответ

1 голос
/ 26 марта 2020

Docker построен только для linux из-за его пространства имен ядра. Таким образом, когда вы запускаете контейнер docker на компьютере windows, он фактически запускает виртуальную машину linux, которая запускает этот контейнер docker (следовательно, для запуска docker требуется Hyper-V). Пути к файлам UNIX, используемые linux и ma c, отличаются от путей, используемых windows. В linux и ma c пути к файлам начинаются с /, а в windows пути к файлам начинаются с диска (например, C:/). Две разные системы несовместимы друг с другом, поэтому docker устанавливает для диска C значение /host_mnt/c, чтобы системы согласовывались друг с другом.

...