Docker для Windows - каталог монтирования становится пустым

У меня есть образ с установленным MYSQL. Мне нужно сопоставить каталог / var / lib / mysql с моей хост-системой. Ниже приведен снимок экрана, который я вижу в этом каталоге, когда использую следующую команду

docker run --rm -it --env-file=envProxy --network mynetwork --name my_db_dev -p 3306:3306 my_db /bin/bash

Docker для Windows - каталог монтирования становится пустым

Теперь, когда я пытаюсь смонтировать каталог со своего хоста (Windows 10), запустив другой контейнер из того же образа, каталог mysql остается пустым.

docker run --rm -it --env-file=envProxy --network mynetwork -v D:/docker/data:/var/lib/mysql --name my_db_dev1 -p 3306:3306 my_db /bin/bash

Также пробовал, но ничего не работает

docker run --rm -it --env-file=envProxy --network mynetwork -v D:\docker\data:/var/lib/mysql --name my_db_dev1 -p 3306:3306 my_db /bin/bash

Docker для Windows - каталог монтирования становится пустым

Одна вещь, которую я вижу, это то, что каталог mysql в пути теперь имеет пользователя root, а не mysql, как в предыдущем случае.

Я хотел, чтобы весь контент из существующего контейнера (каталог mysql) был скопирован обратно в каталог монтирования хоста

Это возможно ? и как этого добиться?

Я какое-то время не использовал docker для win, но можете ли вы дважды проверить, что все еще требуется предоставить docker-разрешения для чтения с диска - для этого была опция в пользовательском интерфейсе. См. Документы здесь docs.docker.com/docker-for-windows/#shared-drives

petrch 18.12.2018 11:00

Я дал необходимое разрешение по мере необходимости

bukubapi 18.12.2018 11:43
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
2
1 785
4

Ответы 4

Если вам нужно загрузить файл от из контейнера на хост, лучше использовать команду docker cp: https://docs.docker.com/engine/reference/commandline/cp/

Это будет выглядеть так: docker cp my_db_dev1:/var/lib/mysql d:\docker\data

UPD

Actually I want to persist the database files across other containers, so I wanted use volumes

В этом случае вам необходимо:

  1. Начните использовать docker-compose для оркестровки контейнеров.

  2. В docker-compose.yml вы создаете том, который используется всеми контейнерами. Что-то типа:

docker-compose.yml

version: '3'
services:
  db1:
    image: whatever
  volumes:
    - myvol:/data

  db2:
    image: whatever2
  volumes:
    - myvol:/data

volumes:
  myvol:  

Описание: https://docs.docker.com/compose/compose-file/#volume-configuration-reference

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

bukubapi 18.12.2018 11:36

Спасибо, простой вопрос, правильно ли работают тома в окнах докеров. ? Я пытался создать тома и назначить их с помощью команды docker run, но не смог установить исходный каталог на хосте. В приведенном выше примере / data будет отображаться в / var / lib / mysql.

bukubapi 18.12.2018 12:26

Да, тома работают на Windows. Но этот том не является смонтирован по явному пути хоста.

grapes 18.12.2018 12:33

тогда в этом случае myvol будет отображаться в D: \ docker \ data и / data в / var / lib / mysql. Пожалуйста, дай мне знать

bukubapi 18.12.2018 12:37

Используйте пути Windows, записывающие с обратной косой чертой '\', и рекомендуется использовать переменные для указания пути. С другой стороны, для Linux используйте косую черту '/'. Например:

docker run -it -v %userprofile%\work\myproj\some-data:/var/data

Та же проблема на Docker Desktop (2.0.0.3 (31259)). Получил решение от это проблемы.

I ensured the containers were stopped, opened docker settings, selected "Shared Drives", removed the tick on "C" and added it again. Docker asked for the Windows account credentials and I entered the new ones. After that and starting containers, mount volumes were ok. Problem solved.

Это может решить проблему проще, просто сбросив учетные данные в настройках Docker.

попробуйте отключить антивирусную программу или брандмауэр. Затем нажмите «Сбросить учетные данные» в разделе «Настройки / общие диски». У меня это сработало.

С наилучшими пожеланиями.

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