2016-12-27 3 views
5

Я пытаюсь выполнить Dockerize и Open Source проект, который я создал на втором курсе колледжа, этот проект использует MariaDB, phpMyAdmin и PHP/Yii Framework.Объемы докеров MariaDB Windows

Моя цель - подготовить его к использованию только с помощью простой команды docker-compose up .

Мне удалось установить связь между phpMyAdmin и DB, и теперь я застрял на попытке получить Docker для относительного пути к тому базы данных, чтобы сделать его согласованным.

Вот что я относительно объема монтажа:

volumes: 
    - './database/mysql/:/var/lib/mysql' 

Это хранит файлы базы данных внутри проекта, а затем я могу игнорировать эти файлы в .gitignore Проблема заключается в том, когда я запускаю docker-compose up с этой конфигурацией Я получаю:

Invalid volume specification: 'C:\Users\MySelf\coding\my_app\database\mysql:/var/lib/mysql:rw'

Что касается принимающей стороны, я использую Windows с Докер Toolbox, но я хочу, чтобы docker-compose.yml ш ork независимо от ОС.

Я видел другие похожие вопросы, но их ошибка исходила из проблем с абсолютными путями в Windows, которые я не ищу.

EDIT: Добавление правильный окончательный Докер-compose.yml, мы надеемся, что это может помочь

version: '2' 
services: 
    web_db: 
    build: ./database/mysql 
    command: "mysqld --innodb-buffer-pool-size=20M" 
    volumes: 
     - ./database/mysql/data/:/var/lib/mysql 
     - ./database/mysql/initDB/create_tables.sql:/docker-entrypoint-initdb.d/create_tables.sql 
    environment: 
     MYSQL_ROOT_PASSWORD: 'YOURPASSWORD' 
     MYSQL_DATABASE: 'support-technique' 
     MYSQL_ROOT_HOST: '172.17.0.1' 
    ports: 
     - "3306:3306" 
    container_name: web_db 

    web: 
    build: . 
    depends_on: 
     - web_db 
    links: 
     - web_db:db 
    ports: 
     - "80:80" 

    phpmyadmin: 
    image: phpmyadmin/phpmyadmin 
    depends_on: 
     - web_db 
    links: 
     - web_db:mysql 
    ports: 
     - "8181:80" 
    environment: 
PMA_HOST: mysql 
+0

Но '/ var/lib/mysql' это путь к Linux! – Hackerman

+0

@Hackerman '/ var/lib/mysql' - это путь в контейнере Docker не на моей главной машине – Daniel

ответ

4

При Mount a host directory as a data volume, документация говорит:

host-dir может быть либо абсолютным путь или имя. Если вы укажете абсолютный путь для host-dir, привязки привязки Docker к указанному вами пути. Если вы укажете имя, Docker создаст именованный том этим именем.

Значение Имени должно начинаться с алфавитно-цифровым символом, а затем a-z0-9, _ (подчеркиванием), . (периода) или - (дефисом).
Абсолютный путь начинается с / (косая черта).

Это объясняет сообщение об ошибке.

Используя абсолютный путь links it to the OS (который не то, что вы хотите)

docker run -v c:\<path>:/c:\<container path> 
docker run -v /c/<path>:/c:\<container path> 

Как было упомянуто в "Running a docker-compose “Getting Started” example causes “Invalid volume specification” on Windows", попробуйте первые настройки этого docker-compose environment variable:

Создать .env файл в пути докер -compose.YML помещается с следующим содержанием:

COMPOSE_CONVERT_WINDOWS_PATHS=1 

OP Daniel подтверждает, что in the commentsс .env включая COMPOSE_CONVERT_WINDOWS_PATHS, относительный путь работает.

Я бы рекомендовал вместо этого использовать имя data volume: оно не зависит от имени хоста.

+0

Так относительные пути вообще не являются параметрами? – Daniel

+1

@ Daniel Точно: для хоста нет относительного пути: абсолютный путь или имя ваулума. – VonC

+0

Фактически относительные пути работают! Мне просто нужно было следовать вашему предложению и добавить 'COMPOSE_CONVERT_WINDOWS_PATHS = 1' в .env! Можете ли вы уточнить свой ответ, чтобы я мог дать вам щедрость? – Daniel

Смежные вопросы