Docker пытается создать mkdir папку, которую я монтирую

Почему Docker пытается создать папку, которую я монтирую? Если я перейду в C: \ Users \ szx \ Projects

docker run --rm -it -v "${PWD}:/src" ubuntu /bin/bash

Эта команда завершается со следующей ошибкой:

C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: error while creating mount source path '/c/Users/szx/Projects': mkdir /c/Users/szx/Projects: file exists.

Я использую Docker Toolbox в Windows 10 Home.


person szx    schedule 12.06.2018    source источник
comment
Вы решили эту проблему? У меня то же самое   -  person ferprez    schedule 28.11.2018
comment
В моем случае ошибка возникла из-за того, что я монтировал том из пути / каталога, содержащего символическую ссылку, после того, как я изменил каталог на реальный путь, по которому он работал. Насколько мне известно, эта ошибка существует и сегодня.   -  person szx    schedule 03.10.2019
comment
Да, это уже существующая ошибка. Вот билет докера для Windows, который отражает эту проблему: github.com/docker/for- win / issues / 5778. Вы можете увидеть там, когда более новая версия исправит это (надеюсь).   -  person Csongor Halmai    schedule 05.03.2020


Ответы (15)


Я получил эту ошибку после изменения пароля Windows. Мне пришлось зайти в настройки Docker и выполнить «Сброс учетных данных» в разделе «Общие диски», а затем перезапустить Docker.

person melicent    schedule 17.12.2018
comment
У меня то же самое с паролем. Что касается меня, я снял отметку с общего диска, применил, затем снова проверил общий диск и применил. - person Nicklas Mandrup Frederiksen; 29.07.2019
comment
У меня точно такая же ошибка. и нет Сбросить учетные данные в настройках рабочего стола докера с v3.5.1. Вы решаете ту же проблему в последней версии? - person Baodi Di; 10.07.2021
comment
проблема исчезла после перезапуска рабочего стола докера. :) - person Baodi Di; 10.07.2021

Для всех, кто запускает mac / osx и сталкивается с этим, я перезапустил рабочий стол докера, чтобы решить эту проблему.

person lancepants    schedule 04.12.2020
comment
ты спас мне день! - person Gaurav Khare; 10.12.2020
comment
То же самое! Спасибо, что поделились своим решением. - person dadoonet; 10.12.2020
comment
Большое спасибо! - person Eric Wiener; 14.01.2021
comment
Что ж, я буду дядей обезьяне! Это устранило мою проблему! Спасибо за публикацию! - person David Roth; 21.03.2021
comment
То же самое и с Windows, перезапуск докера решил это! - person Al-Mothafar; 29.03.2021
comment
Ницца. Прекрасно работает после перезагрузки на Win 10. Спасибо. - person Wojciech Mruk; 31.03.2021

Моя проблема заключалась в том, что смонтированный на предохранителе том (например, sshfs и т. Д.) Снова был установлен в контейнер. Мне не помогло то, что держатель предохранителя принадлежал тому же владельцу, что и пользователь внутри контейнера.

Я предполагаю, что основная проблема заключается в том, что процесс наблюдения _2 _ / _ 3_ должен также удерживать предохранитель при настройке контейнера.

В конце концов это помогло смонтировать том предохранителя с опцией allow_other. Имейте в виду, что это открывает доступ для любого пользователя. Лучше бы allow_root - не тестировал, т.к. заблокирован по другим причинам.

person pico_prob    schedule 08.05.2020
comment
Спасибо. Я смог решить эту проблему, используя sshfs -o allow_other и отредактировав /etc/fuse.conf - person taari; 23.03.2021
comment
allow_root вариант, похоже, тоже помогает. - person Rafał Krypa; 23.04.2021

Убедитесь, что папка используется совместно с виртуальной машиной, встроенной в докер. Это отличается от различных типов докеров для настольных компьютеров. Я считаю, что с помощью панели инструментов вы можете найти общие папки в конфигурации VirtualBox. Также следует отметить, что в этих каталогах учитывается регистр. Один из способов отладки - попробовать:

docker run --rm -it -v "/:/host" ubuntu /bin/bash

И посмотрите, как выглядит файловая система в разделе «/ host».

person BMitch    schedule 28.11.2018
comment
Я увидел, что к моему диску C предоставлен общий доступ, подумал, что это ошибка, и не предоставил общий доступ через окно свойств. Потом я столкнулся с этой ошибкой. Просто используя графический интерфейс Docker Desktop для Windows на странице настроек «Общие диски», я смог исправить эту ошибку, снова предоставив общий доступ к диску. - person 2b77bee6-5445-4c77-b1eb-4df3e5; 06.03.2019
comment
Это отличный совет, спасибо вам за это. Благодаря этому совету я обнаружил, что у докеров есть проблемы с переходами на окнах хоста. - person Andrew Savinykh; 08.01.2020
comment
Связанный - была эта проблема с подключенным каталогом в minikube. Мне пришлось запустить minikube start --mount-string="...", чтобы повторно смонтировать каталог, после чего мое развертывание сработало. - person inostia; 16.04.2021

Я столкнулся с этой проблемой в Docker (Windows) после обновления до 2.2.0.0 (42247). Проблема заключалась в использовании регистра в имени папки, которое я указал в своих аргументах для команды docker.

person Victor F    schedule 22.01.2020
comment
То же самое! // c / users / blablabla нужна заглавная буква «U» в поле «Пользователи». - person GaTechThomas; 24.12.2020

Я тоже столкнулся с этой проблемой. Я использовал следующую команду, чтобы поделиться папкой с контейнером

docker run ... -v c:/seleniumplus:/dev/seleniumplus ...

Но больше работать не может.

Я использую Windows 10 в качестве хоста. Мой докер недавно был обновлен до "19.03.5 build 633a0e". Недавно я изменил свой пароль Windows.

Я выполнил инструкции, чтобы повторно открыть общий доступ к диску «C», перезапустил докер и даже перезапустил компьютер, но это не сработало :-(. Внезапно я обнаружил, что папка - «C: \ SeleniumPlus "в проводнике, поэтому я запустил

docker run ... -v C:/SeleniumPlus:/dev/seleniumplus ...

И это сработало. Поэтому он чувствителен к регистру, когда мы указываем общую папку Windows в последней версии докера ("19.03.5 build 633a0e").

person lei wang    schedule 07.02.2020

Вы использовали этот контейнер раньше? Вы можете попытаться удалить все тома докеров перед повторным выполнением вашей команды.

docker volume rm `(docker volume ls -qf dangling=true)`

Я пробовал вашу команду локально (MacOS) без ошибок.

person Mornor    schedule 12.06.2018
comment
Спасибо, но, к сожалению, это не помогло, результат docker volume ls -qf dangling=true был пуст - person szx; 15.06.2018
comment
объем докера rm (docker volume ls -q dangling=true) без f - person Abdulkarim Kanaan; 10.06.2019
comment
@ Абдулкарим. Неправильный. Переключатель f правильный, как отмечает szx. Значит filter, filter is dangling = true. Q также является правильным, поскольку в результате получается просто выводить имя тома без имен столбцов. - person Jason M; 10.02.2020

Была точная ошибка. В моем случае я использовал c вместо C при переходе в свой каталог.

person Andrii    schedule 06.02.2020

Если вы работаете с отдельным пользователем Windows, с которым вы разделяете том (обычно C:): вам необходимо убедиться, что у него есть доступ к папкам, с которыми вы работаете - включая их родителей, до вашего домашнего каталога.

Также убедитесь, что EFS (шифрованная файловая система) отключена для общих папок.

См. Также мой ответ здесь.

person TheOperator    schedule 07.08.2019

Я работаю в Linux (точнее, WSL2 под Windows), и моя проблема заключалась в том, что на моем хосте существовала символическая ссылка для этой папки:

# docker run --rm -it -v /etc/localtime:/etc/localtime ...
docker: Error response from daemon: mkdir /etc/localtime: file exists. 


# ls -al /etc/localtime
lrwxrwxrwx 1 root root 25 May 23  2019 /etc/localtime -> ../usr/share/zoneinfo/UTC 

У меня сработало вместо этого привязать источник /usr/share/zoneinfo/UTC.

person TheCooocy    schedule 08.12.2020

У меня была такая же проблема при разработке с использованием докера. После того, как я переместил папку проекта локально, Docker не смог смонтировать файлы, которые были перечислены с родственными путями, и попытался вместо этого создать каталоги.

Удаление томов / образов / контейнеров докеров не решило проблему. Простой перезапуск docker-desktop сделал свою работу.

person Jeppe Gravgaard    schedule 10.12.2020

Я столкнулся с этой ошибкой, когда другой запущенный контейнер уже использовал папку, которая монтируется в команде запуска докера. Пожалуйста, проверьте, есть ли то же самое, и, если он не нужен, остановите контейнер. Лучшее решение - использовать громкость с помощью следующей команды -

создание тома докера

затем смонтируйте этот созданный том, если требуется, чтобы он использовался несколькими контейнерами.

person Abhishek Jain    schedule 02.02.2019

Для тех, у кого есть эта проблема в ОС на базе Linux, попробуйте перемонтировать удаленные папки, которые используются образами докеров. Это помогло мне в ubuntu:

sudo mount -a
person Ahmet Cetin    schedule 29.10.2019

У меня возникла эта проблема, когда я работал с Docker в зашифрованном каталоге CryFS в Ubuntu 20.04 LTS. То же самое, вероятно, происходит в других UNIX-подобных ОС.

Проблема заключалась в том, что по умолчанию виртуальный каталог, подключенный к CryFS, недоступен для root, но Docker работает как root. Решение состоит в том, чтобы разрешить root-доступ для FUSE-смонтированных томов, отредактировав /etc/fuse.conf: просто закомментируйте параметр use_allow_other в нем. Затем смонтируйте зашифрованный каталог с помощью команды cryfs <secretdir> <opendir> -o allow_root (где <secretdir> и <opendir> - зашифрованный каталог и FUSE точка монтирования для дешифрованного виртуального каталога, соответственно).

Благодарим автора этого комментария на GitHub за то, что он привлек мое внимание к вариант -o allow_root.

person Laryx Decidua    schedule 15.04.2021

Я запускаю рабочий стол докера (движок докера v20.10.5) в Windows 10 и столкнулся с аналогичной ошибкой. Я пошел дальше и удалил существующее изображение из пользовательского интерфейса docker-desktop, удалил рассматриваемую папку (для меня удаление папки было вариантом, потому что я просто проводил локальное тестирование), удалил существующий контейнер, перезапустил докер, и он сработал

person JavaTec    schedule 27.04.2021