使用docker-compose创build一个MySQL模式/数据库

我想创build一个MySQL数据库/架构,如果它不存在。

这是我所尝试的:

泊坞窗,compose.yml

mysql: image: mysql:5.6.26 environment: - MYSQL_ROOT_PASSWORD=root command: "mysql -uroot -proot < createDB.sql" ports: - "3306:3306" 

createDB.sql

 CREATE DATABASE IF NOT EXISTS bignibou; 

这是行不通的。 如果不存在,使用docker / docker-compose创build模式的最佳方式是什么?

我终于find了解决scheme的开始。

MySQL映像需要一个环境variables,即MYSQL_DATABASE ,它在映像启动时使用数据库的名称初始化容器。有关完整的文档,请参阅此处。

或阅读下面的摘录:

MYSQL_DATABASE

该variables是可选的,并允许您指定在映像启动时要创build的数据库的名称。 如果提供了用户/密码(见下文),那么该用户将被授予对该数据库的超级用户访问(对应于GRANT ALL)。

这是我想出来的:

 mysql: image: mysql:5.6.26 environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=bignibou ports: - "3306:3306" 

我现在需要一种方法来指定默认的sorting规则,但这是另一回事…

编辑 :对于那些有兴趣从默认指定不同的sorting规则,这里是使用另一个configuration文件,将覆盖默认的指令。 见下文:

使用自定义MySQLconfiguration文件MySQL启动configuration在文件/etc/mysql/my.cnf中指定,该文件又包含/etc/mysql/conf.d目录中以.cnf结尾的任何文件。 这个目录下文件的设置将增加和/或覆盖/etc/mysql/my.cnf中的设置。 如果你想使用自定义的MySQLconfiguration,你可以在主机上的一个目录中创build你的替代configuration文件,然后把这个目录位置挂载到mysql容器中的/etc/mysql/conf.d。

如果/my/custom/config-file.cnf是自定义configuration文件的path和名称,可以这样启动你的mysql容器(注意在这个命令中只使用了自定义configuration文件的目录path):

$ docker run –name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD = my-secret-pw -d mysql:tag这会启动一个新的容器some-mysql,其中MySQL实例使用/etc/mysql/my.cnf和/etc/mysql/conf.d/config-file.cnf中的组合启动设置,后者的设置优先。

大概你正在做的事情需要一个额外的脚本。 因此,如果构build一个图像而不是直接使用预先构build的图像是一个选项,则需要使用Dockerfile并使用脚本文件,该脚本文件首先在MySql中导入脚本,然后运行服务本身。

看看这个答案: Docker – 用schema初始化mysql数据库

从docker-compose文档 – 请参阅定义服务 – 您可以知道将使用哪个Dockerfile来构build映像。 因此,您可以创build基于mysql映像的Dockerfile,并使用标准的Dockerfile命令在其中创build数据库。

这可能会有用的情况下有人在这里将来的地方。 真正的问题似乎是docker-compose文件中的“command”语句。 一旦命令成功完成,容器将被破坏。 只有在docker-compose运行并创build了容器之后,才能运行这个sql脚本。 docker-compose“command”实际上是在容器中启动一个服务。 在这种情况下,你用你的命令覆盖了mysql服务。