Docker Bind Mounts в WSL не показывает файлы

Я пытаюсь использовать клиент докера изнутри WSL, подключаясь к движку докера в Windows. Я выставил движок докеров в Windows через порт 2375, и после установки переменной среды DOCKER_HOST в WSL я могу проверить, что это работает, запустив docker ps.

Проблема возникает, когда я пытаюсь смонтировать каталоги в контейнеры докеров из WSL. Например:

  • Я создаю каталог и файл в своей домашней папке на WSL (mkdir ~/dockertest && touch ~/dockertest/example.txt)
  • ls ~/dockertest показывает, что мой файл был создан
  • Теперь я запускаю контейнер докеров, монтируя свою тестовую папку докеров (docker run -it --rm -v ~/dockertest:/data alpine ls /data)
  • Я ожидал увидеть example.txt в контейнере докера, но этого не происходит.

Есть идеи, что мне может не хватать?


person richzilla    schedule 01.08.2018    source источник
comment
Как ваши диски Windows подключены к WSL? Под /mnt (например, /mnt/c) или под корнем / (например, / c)? Он должен быть установлен в root /. Вы можете определить это в /etc/wsl.conf, просто поместите туда root = /. Дополнительная информация здесь: blogs.msdn.microsoft.com / commandline / 2018/02/07 /   -  person DzeryCZ    schedule 24.10.2018
comment
Вы когда-нибудь находили решение для этого? Я также сталкиваюсь с пустыми подключенными к привязке каталогами в своих контейнерах, только монтирования являются общими папками в моей сети.   -  person J. Scott Elblein    schedule 06.11.2020


Ответы (4)


Отличные инструкции по настройке Docker в WSL можно найти по адресу https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly#ensure-volume-mounts.-work - решил большинство моих проблем. Самым большим трюком для меня были каталоги, подключенные к привязке; вы должны использовать путь в WSL, который демон Docker сможет переводить, например / c / Users / rfay / myproject.

person rfay    schedule 24.10.2018

Я не думаю, что вам нужно менять точку холма, как предлагает ссылка. Скорее, если вы используете комбинацию pwd и sed, вы должны получить нужный эффект.

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

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

person Damo    schedule 08.03.2019

Все, кто сталкивается с этой проблемой, следуют этому: Docker Desktop WSL2 Backend и создайте убедитесь, что вы используете версию 2 WSL в PowerShell:

> wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  Ubuntu                 Running         2
  docker-desktop-data    Running         2

Если в вашей ВЕРСИИ Ubuntu не указано 2, вам необходимо обновить ее в соответствии с указанным выше руководством.

После этого вы сможете подключить свой каталог Linux к контейнеру Docker напрямую, например:

docker run -v ~/my-project:/sources <my-image>
person kamion    schedule 06.06.2020

Специфично для WSL 1. Возникла та же проблема. Следует помнить, что команда docker run не выполняет контейнер сразу же в командной оболочке. Он отправляет аргументы запуска демону докера, который неправильно интерпретирует путь WSL. Следовательно, вам необходимо передать путь в формате Windows в кавычках и с экранированными обратными косыми чертами.

Ваш путь к Windows -

\\wsl$\Ubuntu\home\username\dockertest

Команда Docker после выхода, вероятно, будет похожа на

docker run -it --rm -v "\\\\wsl\$\\Ubuntu\\home\\username\\dockertest":/data alpine ls /data
person Mohammad Azim    schedule 03.10.2020