2016-03-07 107 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上啓動。

相關問題