如何使用Docker compose创建一个mysql数据库?

时间:2016-03-07 13:33:16

标签: mysql docker-compose

我试图在docker上托管一个使用MySQL db的应用程序。我正在使用docker compose。我的yml文件如下所示:

version: '2'
volumes:
  data_sql:    
services:  
medical-mysql:
    image: mysql
    hostname: medical-mysql    
    volumes:    
     - data_sql:/dbcreation.sql
    environment:
      MYSQL_DATABASE: Medical
      MYSQL_ROOT_PASSWORD: root
      STARTUP_SQL: data_sql
    ports:
    - "3306:3306"
  medical-main:
    build: .
    ports:
     - "8080:8080"    
    depends_on:
     - medical-mysql

我有dbcreation.sql创建数据库架构并保存在yml文件夹中。当我运行yml文件时,好像文件没有运行。

我错过了什么?

2 个答案:

答案 0 :(得分:23)

只需将.sql文件(dbcreation.sql)放在一个文件夹(即。/ mysql_init)中,然后将该文件夹添加为如下的卷:

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

MySQL映像将在启动时执行/docker-entrypoint-initdb.d中的所有.sql,.sh和.sql.gz文件。

答案 1 :(得分:22)

1)创建转储文件 dbcreation.sql

2)创建 import.sh 文件:

#!/usr/bin/env bash
mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql

3)创建 docker-compose.yaml

database:
  image: mysql
  container_name: database.dev
  command: mysqld --user=root --verbose
  volumes:
    - ./dbcreation.sql:/tmp/dbcreation.sql
    - ./import.sh:/tmp/import.sh
  ports:
    - "3306:3306"
  environment:
    MYSQL_DATABASE: "test"
    MYSQL_USER: "test"
    MYSQL_PASSWORD: "test"
    MYSQL_ROOT_PASSWORD: "root"
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"

&#34; - ./dbcreation.sql:/tmp/dbcreation.sql" - &#34; - local_path:path_inside_container&#34;

4)运行

docker-compose up
docker exec database.dev bash /tmp/import.sh