У меня есть образ с установленным MYSQL. Мне нужно сопоставить каталог / var / lib / mysql с моей хост-системой. Ниже приведен снимок экрана, который я вижу в этом каталоге, когда использую следующую команду
docker run --rm -it --env-file=envProxy --network mynetwork --name my_db_dev -p 3306:3306 my_db /bin/bash
Теперь, когда я пытаюсь смонтировать каталог со своего хоста (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
Одна вещь, которую я вижу, это то, что каталог mysql в пути теперь имеет пользователя root, а не mysql, как в предыдущем случае.
Я хотел, чтобы весь контент из существующего контейнера (каталог mysql) был скопирован обратно в каталог монтирования хоста
Это возможно ? и как этого добиться?
Я дал необходимое разрешение по мере необходимости
Если вам нужно загрузить файл от из контейнера на хост, лучше использовать команду docker cp
: https://docs.docker.com/engine/reference/commandline/cp/
Это будет выглядеть так:
docker cp my_db_dev1:/var/lib/mysql d:\docker\data
Actually I want to persist the database files across other containers, so I wanted use volumes
В этом случае вам необходимо:
Начните использовать docker-compose
для оркестровки контейнеров.
В 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
На самом деле я хочу сохранить файлы базы данных в других контейнерах, поэтому я хотел использовать тома.
Спасибо, простой вопрос, правильно ли работают тома в окнах докеров. ? Я пытался создать тома и назначить их с помощью команды docker run, но не смог установить исходный каталог на хосте. В приведенном выше примере / data будет отображаться в / var / lib / mysql.
Да, тома работают на Windows. Но этот том не является смонтирован по явному пути хоста.
тогда в этом случае myvol будет отображаться в D: \ docker \ data и / data в / var / lib / mysql. Пожалуйста, дай мне знать
Используйте пути 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.
попробуйте отключить антивирусную программу или брандмауэр. Затем нажмите «Сбросить учетные данные» в разделе «Настройки / общие диски». У меня это сработало.
С наилучшими пожеланиями.
Я какое-то время не использовал docker для win, но можете ли вы дважды проверить, что все еще требуется предоставить docker-разрешения для чтения с диска - для этого была опция в пользовательском интерфейсе. См. Документы здесь docs.docker.com/docker-for-windows/#shared-drives