加载SQL将数据库文件创build到Docker

我有麻烦加载我的SQL文件来创build架构和相关的表,我也试图使用撰写文件中的'卷'选项复制到'docker-entrypoint-initdb.d'目录,但没有任何事情。


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

MySQL转储: https : //pastebin.com/6ApQwt1F


Docker撰写文件

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 

你做错了。 docker中没有init系统。 所以你不应该在容器内使用server start/stop 。 总是看官方的图片文档

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

初始化新实例首次启动容器时,将使用提供的configurationvariables创build并初始化具有指定名称的新数据库。 此外,它将执行在/docker-entrypoint-initdb.d中find的具有扩展名.sh,.sql和.sql.gz的文件。 文件将按字母顺序执行。 通过将SQL转储装载到该目录中并提供自定义图像和贡献数据,可以轻松地填充您的mysql服务。 SQL文件将被默认导入到由MYSQL_DATABASEvariables指定的数据库中。

因此,您可以将默认转储文件复制到/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