3

Windows 10, сборка 15063.11, под управлением Windows Subsystem для Linux (WSL) Xenial 16.04.2 LTS.

В WSL работает докер-клиент, подключающийся к демону Windows Hyper-V. Веселье.

Единственная проблема, от которой я не могу избавиться, - это сопоставление путей между WSL и демоном Hyper-V для томов - из файлов компоновки. Предполагается, что файлы Compose должны быть кроссплатформенными - все они относительны, и если я начну просто менять compose.yml чтобы он соответствовал моему чудовищному WSL, сервисы не запустятся нигде больше, что не совсем практично.

Есть ли что-то вроде export MSYS_NO_PATHCONV=1 которое я могу сделать, чтобы WSL прекратил искажение путей перед их отправкой демону?

Где эта проблема должна быть решена? В демоне? В сочинении? в WSL? куда я могу внести свой вклад?

Отображения томов вне компоновочных файлов работают прекрасно, потому что вы можете указать их абсолютно и в правильном формате, когда вы передаете их клиенту / демону.

Например, docker run -v c:/my/stuff/is/here:/vars/now/here magicImage изнутри WSL работает фантастически. Просто составить - получить абсолютные имена файлов из WSL, которые на самом деле не являются именами файлов, например, /mnt/c/my/stuff/isnt/here потому что во вселенной демона Hyper-V /mnt/c/ - нонсенс.

продолжение: обратился к докеру / сочинить. docker-compose вызывает os.path.abspath для разрешения абсолютных путей к ресурсам, поэтому, скорее всего, проблема заключается в использовании Microsoft / BashOnWindows.

1 ответ1

2

Я думаю, что ответ уже находится в Docker-compose и неверных абсолютных путях для томов. · Проблема № 1854. · Поток Microsoft/BashOnWindows на GitHub, но я публикую здесь, чтобы другие могли увидеть:

Есть два возможных обходных пути: символические ссылки и привязка. Они оба работают, но связывание, вероятно, лучше, так как некоторые сервисы не используют символические ссылки.

aseering предоставляет команды в комментарии к ветке GitHub .

$ sudo mkdir /c
$ sudo mount --bind /mnt/c /c
$ cd /c/path/to/project
$ docker-compose ...

Единственным недостатком привязки является то, что она длится только до тех пор, пока экземпляр (в данном случае контейнер) из-за способа, которым мы инициализируем контейнеры.  Таким образом, привязка должна быть частью процедуры запуска контейнера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .