#docker #docker-compose
Вопрос:
У меня в docker-compose.yml
файле есть следующее:
version: '3.9' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql - db_import:/import restart: always ports: - "3338:3306" environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress volumes: db_data: {} db_import: {} dist: {}
Проблема в том, что, хотя у меня есть dump.sql
файл в моей db_import
папке (в той же папке, где docker-compose.yml
он находится), я нахожу, что docker-compose exec db ls -al /import
он показывает пустой каталог. Я попытался перезапустить все контейнеры docker без каких-либо улучшений.
Почему этот каталог не пропускает мой контент?
Комментарии:
1. Я думаю, что относительный путь не выводится автоматически и вместо этого должен быть чем-то вроде ./db_import. В противном случае это предполагает абсолютную патинированность. Это, или docker_volume уже существует с именем
Ответ №1:
Написав:
volumes: - db_data:/var/lib/mysql - db_import:/import (...) volumes: db_data: {} db_import: {} dist: {}
Вы создали так называемые Именованные тома с именами db_data
db_import
и dist
. Докер не говорит нам, где хранятся эти тома (и нас это не должно волновать). Такого рода тома используются для обмена данными между контейнерами, и у них нет доступа ни к чему с вашей хост-машины.
Если вы хотите обмениваться файлами между вашим хостом и контейнером, вы должны вместо этого использовать привязки монтирования — синтаксис почти идентичен, вам просто нужно заменить db_data
и db_import
с абсолютными путями к этим каталогам:
version: '3.9' services: db: image: mysql:5.7 volumes: - /PATH/TO/db_data:/var/lib/mysql - /PATH/TO/db_import:/import restart: always ports: - "3338:3306" environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress #volumes: That part isn't needed unless you use "dist" volume somewhere # db_data: {} # db_import: {} # dist: {}