使用docker-compose创建一个MySQL模式/数据库
我想创建一个mysql数据库/模式,如果它不存在。使用docker-compose创建一个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创建模式的最佳方式是什么?
我终于找到了解决的开始。
MySQL的图像需要一个环境变量,即MYSQL_DATABASE与图像启动时看到这里充满documentation数据库的名称初始化容器。
或阅读以下摘录:
MYSQL_DATABASE
这个变量是可选的,并允许您指定要在图像启动时创建一个 数据库的名称。如果提供的用户/密码为 (见下文),则该用户将被授予超级用户访问 (对应于GRANT ALL)到该数据库。
这里是我想出了:
mysql:
image: mysql:5.6.26
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=bignibou
ports:
- "3306:3306"
我现在需要一种方法来指定默认的整理,但是那是另一个故事...
编辑:对于那些有兴趣在指定与默认值不同的排序规则时,以下是使用另一个将覆盖默认值的配置文件的说明。请看下图:
使用自定义MySQL配置文件中的MySQL启动 配置在文件/etc/mysql/my.cnf规定,并 文件又包含在/ etc/mysql的找到的所有文件/conf.d 以.cnf结尾的目录。在这个目录中的文件中的设置将会增加和/或覆盖/etc/mysql/my.cnf中的设置 。如果要使用定制的MySQL配置 ,则可以在主机上的目录中创建替代 配置文件,然后将 的目录位置挂载为mysql 容器内的/etc/mysql/conf.d。
如果/my/custom/config-file.cnf是自定义配置文件的路径和名称,可以像这样启动mysql容器(注意 只使用自定义配置文件的目录路径在此 命令):
$泊坞窗运行--name一些MySQL的-v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD =我的秘密-PW -d mysql的:这个标签将启动一个新的 容器some-mysql,其中MySQL实例使用来自/etc/mysql/my.cnf和 /etc/mysql/conf.d/config-file.cnf的组合 启动设置,其中来自后者的设置 优先。
相信我:使用脚本和Dockerfile更容易 – Grasshopper
以下是在docker-compose.yml文件中指定默认排序规则的方法:mysql: image:mysql:5.7 command:[mysqld,--character-set- server = utf8mb4,--collation-server = utf8mb4_unicode_ci] – William
从docker-compose文档 - see Define Services - 你可以知道它将用于构建图像的Dockerfile。因此,您可以基于mysql映像创建Dockerfile,并使用标准Dockerfile命令在其中创建数据库。
嗨。嗯。唯一的问题是,如果我想升级到另一个版本的mysql,我需要更改Dockerfile并使用创建数据库的自定义命令对其进行更新。这是不是一个大问题,但不完全干净,因为我不扩展Dockerfile,但修改它... – balteo
可能您正在尝试执行的操作需要额外的脚本。因此,如果构建映像而不是直接使用预构建映像是您的选择,则需要使用Dockerfile并使用脚本文件,该文件首先在MySql中导入脚本,然后运行服务本身。
如果有人在将来登陆这里,这可能会很有用。真正的问题似乎是docker-compose文件中的“command”语句。一旦命令成功完成,容器将被销毁。只有在docker-compose运行并创建了容器后,才能运行此SQL脚本。 docker-compose“command”真的是在容器中启动一项服务。在这种情况下,你用你的命令覆盖了mysql服务。
createDB.sql有'USE bignibou;'作为它的第一行吗? –
不是。它没有这条线...... – balteo
我上面的docker-compose的问题是'command:'应该运行容器。因此,我正在寻找一种方法来在容器上运行一个后命令... – balteo