Docker-compose mysql mount том превращает sql в папку - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь использовать Docker для создания набора контейнеров (wordpress и MySQL), которые помогут моей локальной разработке с Wordpress.Поскольку мы работаем с действующей базой данных, я хочу смонтировать файл dump.sql в контейнер Docker mysql.Ниже мой файл .yml.

version: '2' 

services: 
  db: 
    image: mysql:latest 
    volumes: 
      - ./data:/docker-entrypoint-initdb.d #./data holders my dump.sql file
    environment: 
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress: 
    depends_on: 
      - db
    image: wordpress:latest 
    ports:
      - "8000:80" 
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: wordpress 
    volumes: 
      - ./wp-content/themes/portalV3:/var/www/html/wp-content/themes/portalV3 
      - ./wp-content/plugins:/var/www/html/wp-content/plugins 
      - ./wp-content/uploads:/var/www/html/wp-content/uploads 

Все работает, но через ~ 10 секунд происходит сбой в Docker-контейнере для mysql.Просматривая журналы, я получаю следующую ошибку:

/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/dump.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR: Can't initialize batch_readline - may be the input source is a directory or a block device.

При ближайшем рассмотрении (присоединение к перезагруженному контейнеру mysql) я вижу, что действительно мой файл dump.sql не был перенесен в контейнер, нопапка с тем же именем была создана в /docker-entrypoint-initdb.d.

Может кто-нибудь помочь мне понять, как я получаю docker-compose для копирования моего файла dump.sql и импорта в базу данных?

Приветствия,

Питер

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Проблема, с которой вы столкнулись при использовании docker-entrypoint-initdb.d, заключается в том, что поскольку ваши исходные данные являются каталогом, а не файлом, конечный файл (docker-entrypoint-initdb.d) также должен быть каталогом.И наоборот.

Так что либо делайте

volumes: 
   - ./data:/docker-entrypoint-initdb.d/

или ..

volumes: 
   - ./data/mydump.sql:/docker-entrypoint-initdb.d/mydump.sql
0 голосов
/ 31 июля 2018

Да, именно так вы должны смонтировать файлы .sql или .sh, т.е. добавить том, сопоставив файлы SQL или sh с папкой док-контейнера docker-entrypoint-initdb.d.Но это вызывает ошибку по какой-то странной причине, может быть потому, что версия докера MySQL устарела.

Вы можете решить эту проблему, создав собственный образ, т. Е.

Dockerfile

 FROM mysql:5.7
 COPY init.sql /docker-entrypoint-initdb.d/

Создает изображение, а также помогает запустить сценарий инициализации при запуске контейнера.

Чтобы использовать его в файле compose, поместите файлы SQL и файл Dockerfile в папку.

database
  |---init.sql
  |---Dockerfile

docker-compse.yml

 version: '3'
 services:
   mysqldb:
     image: mysqldb
     build: ./database
     container_name: mysql
     ports:
       - "3306:3306"
     environment:
       - MYSQL_ROOT_PASSWORD=root
       - MYSQL_USER=test
       - MYSQL_PASSWORD=root
       - MYSQL_DATABASE=test

Таким образом, вы можете легко настроить переменные среды.

...