2017-08-05 28 views
0

我無法加載我的SQL文件以創建模式和關聯的表,我也嘗試使用撰寫文件中的'卷'選項將sql文件複製到'docker-entrypoint-initdb.d'目錄但是沒有做任何事情。加載SQL將數據庫文件創建爲Docker


表+模式:https://pastebin.com/RTBBGZhn

MySQL的轉儲:https://pastebin.com/6ApQwt1F


泊塢撰寫文件

version: '2' 

services: 
    melissabot: 
    image: melissabot 
    build: . 
    ports: 
     - 7000:7000 
     - 7070:7070 
    depends_on: 
     - mysqlMelissa 
    links: 
     - mysqlMelissa:db 

    mysqlMelissa: 
    image: mysql 
    build: ${PWD}/Docker/DB/ 
    environment: 
     - MYSQL_ROOT_PASSWORD=root 
     # - MYSQL_DATABASE=MelissaBot 
    ports: 
     - "3306:3306" 

    phpmyadmin: 
    image: phpmyadmin/phpmyadmin 
    container_name: phpmyadmin 
    restart: always 
    ports: 
    - 8080:80 
    volumes: 
    - /sessions 
    links: 
     - mysqlMelissa:db 

Dockerfile

FROM mysql:5.6 
ENV MYSQL_ROOT_PASSWORD=root 
# ENV MYSQL_DATABASE=MelissaBot 
COPY setup.sh /mysql/setup.sh 
COPY dump.sql /mysql/Melissa.sql 
RUN chmod +x /mysql/setup.sh 
RUN /mysql/setup.sh 

setup.sh

#!/bin/bash 
set -e 
service mysql start 
mysql -u root MelissaBot < /mysql/Melissa.sql 
service mysql stop 

回答

2

你錯誤地做這件事。 docker中沒有init系統。所以你不應該在容器內使用server start/stop。看看官方圖片文件總是

https://hub.docker.com/_/mysql

初始化一個新的實例 當容器啓動的第一次,具有指定名稱的新數據庫將被創建並與所提供的配置變量初始化。此外,它將執行/docker-entrypoint-initdb.d中的擴展名爲.sh,.sql和.sql.gz的文件。文件將按字母順序執行。您可以通過將SQL轉儲裝入該目錄並使用貢獻數據提供自定義圖像來輕鬆填充您的mysql服務。 SQL文件將默認導入由MYSQL_DATABASE變量指定的數據庫。

因此,您可以將默認轉儲文件複製到/docker-entrypoint-initdb.d,或者在運行容器時使用卷裝入來掛載它們。所以,你扔你setup.sh,改變你的Dockerfile到類似下面

FROM mysql:5.6 
ENV MYSQL_ROOT_PASSWORD=root 
ENV MYSQL_DATABASE=MelissaBot 
COPY dump.sql /docker-entrypoint-initdb.d/ 

但我寧願量的方法安裝它在我撰寫文件中

mysqlMelissa: 
    image: mysql:5.6 
    environment: 
     - MYSQL_ROOT_PASSWORD=root 
     - MYSQL_DATABASE=MelissaBot 
    ports: 
     - "3306:3306" 
    volumes: 
     - dump.sql:/docker-entrypoint-initdb.d/dump.sql 
+0

對不起應使其明確的,我已經使用'volume'部分移動**僅僅是SQL文件,但是當我檢查phpmyadmin時,數據庫沒有可見的地方。 –

+0

你應該檢查'docker-compose logs mysqlMelissa'來檢查它顯示的內容。它肯定會顯示一些錯誤或爲什麼沒有加載轉儲 –

+0

我以爲我試過了,當看着docs + rep時必須跳過它 –