Докер в WSL не будет связывать mount $HOME

У меня самая странная ситуация с использованием Docker на WSL (Подсистема Windows для Linux, Ubuntu 16.04). Я пытаюсь привязать гору /home/username (или просто $HOME для удобства) как том в контейнере, и вместо того, чтобы находить содержимое моего домашнего каталога в контейнере, я полностью получаю другой том.

Что более странно, так это то, что этот "другой том" сохраняется из одного контейнера в другой всякий раз, когда я пытаюсь связать mount $HOME или же /home/username, Если я touch новый файл, он появляется во всех других контейнерах, которые я монтирую $HOME в. Все остальные привязки к любому другому каталогу работают правильно.

Например, все они находятся в одной папке:

docker run -it --rm -v /home/username:/test alpine sh
docker run -it --rm -v $HOME:/test alpine sh
docker run -it --rm -v $HOME:/test -v $HOME:/test2 alpine sh

Когда я делаю docker volume ls Там нет громкости называется /home/username, так что исключает случайное наличие тома, размещенного на докере, с тем же именем.

Что это за таинственный том, который я монтирую, и почему докер не монтирует мой $HOME каталог правильно?

1 ответ

Я использовал инструкции в https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly, чтобы настроить все.

Тогда я должен был явно export HOME=/c/Users/rfay чтобы демон Docker в Windows мог получить к нему доступ. Но это сработало. Основная магия заключается в том, что ваш путь в WSL должен быть чем-то, что демон Docker может перевести в родную Windows.

Нет необходимости менять точку наклона, как предлагает @rfay. Скорее, если вы используете небольшую команду foo, вы можете использовать pwd и sed, чтобы зафиксировать значение для вас.

docker run -it -v $(pwd | sed 's/^\/mnt//'):/var/myfolder -w "/var/myfolder" centos:7

pwd вернет текущую рабочую папку, обычно в формате "/ mnt / c / code / myfolder". Передав это в sed и заменив '/ mnt' ничем, вы оставите такой путь, как '/ c / code / myfolder', который является желаемым путем для докера для окон. вам нужно обернуть все это в $(), чтобы выполнить его на месте.

Я считаю, что это работает очень хорошо.

Другие вопросы по тегам