2016-03-07 54 views
5

我想在Docker上托管一个使用MySQL数据库的应用程序。我正在使用docker撰写。我YML文件看起来像这样:如何使用Docker创建一个mysql数据库?

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它创建了DB模式,并保持在YML文件夹中。当我运行yml文件时,好像文件没有运行。

有什么我错过了?

+0

那么什么是data_sql以及何时调用dbcreation.sql? – Mattia

+0

data_sql只是我创建的用于承载创建文件的卷。我找不到任何其他方式来做到这一点,这也是行不通的。 –

+0

看来你正在dbcreation.sql中装载data_sql。你从不创建数据库。你需要复制到/ var/lib/mysql(而不是dbcreation.sql,如果你想使用它,你需要执行类似于这样的命令:mysql -u user db Mattia

回答

10

1)创建转储文件dbcreation.sql

2)创建import.sh文件:

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

3)创建搬运工-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" 

“ - ./dbcreation.sql:/tmp/dbcrea tion.sql” - “ - LOCAL_PATH:path_inside_container”

4)运行

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

我有一个问题实现你的答案一旦我的主容器启动,它需要构建分贝。它确实给了我很多获得我想要的地方的线索。我将mysql容器创建分割成单独的yml文件。我做了一个sh文件,内容如下: docker-compose -f mysql.yml up -d sleep 10; docker exec medical-mysql bash /tmp/import.sh docker-up up 它的工作原理。有没有更好的方法来确保mysql容器比睡眠准备好? –

+0

@IzharLotem它不是关于容器,而是关于应用程序。容器已准备好,但容器内的应用程序没有。 您需要在应用程序级别解决它。你可以在你的“主容器”中检查MySQL数据库的健康状况,或者你可以在Dockerfile中覆盖CMD,并在导入完成后将标记放在某处。无论如何,这不是码头工作。 – ashatrov

+0

这工作,@ashatrov谢谢 – Devang

3

简单地只是把一个文件夹中(即你的.sql文件(dbcreation.sql)。/mysql_init)和文件夹添加为这样的量:

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

MySQL的图像将执行所有的.sql,.SH和.sql.gz文件/docker-entrypoint-initdb.d上启动。

相关问题