У меня следующая ситуация: я хочу создать связывающее монтирование, которое инициализируется на основе содержимого docker образа.
В MacOS я могу сделать следующее, чтобы выполнить sh this:
- Создание тома:
docker volume create --opt type=none --opt device=%(pwd)/data_dir --opt o=bind --name data_volume
- 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 тома).