Docker Compose - 如何在一个 mysql 容器中引用多个模式

Posted

技术标签:

【中文标题】Docker Compose - 如何在一个 mysql 容器中引用多个模式【英文标题】:Docker Compose - How reference many schemas in one mysql container 【发布时间】:2017-03-13 04:27:53 【问题描述】:

我正在尝试在一个 mysql 容器中使用两种模式。我有两个连接到两个不同模式的 flyway 服务。 Docker Compose 的 .yml 文件如下所示:

version: '2'

services:

mysqldb:
image: mysql:5.6.26
environment:
  MYSQL_USER: user
  MYSQL_PASSWORD: password
  MYSQL_ROOT_PASSWORD: password
  MYSQL_DATABASE:
  - my
  - my_post
ports:
  - "3306:3306"

 flyway-service1-i:
image: mik/flyway-service
volumes:
 - "../resources/db/migration:/migrations/ro"
depends_on:
 - mysqldb
links:
 - mysqldb
command: migrate -url=jdbc:mysql://mysqldb:3306/mi -user=user -password=password -baselineOnMigrate=true -locations='filesystem:/migrations'

flyway-service2-i:
image: mialk/flyway-post-service
volumes:
 - "../../../service2/src/main/resources/db/migration:/migrations/ro"
depends_on:
 - mysqldb
links:
 - mysqldb
command: migrate -url=jdbc:mysql://mysqldb:3306/mi_post -user=user -password=password -baselineOnMigrate=true -locations='filesystem:/migrations'

但是当我运行命令 sudo docker-compose up 终端时会显示此消息:

错误:撰写文件“./docker-compose.yml”无效,因为: services.mysqldb.environment.MYSQL_DATABASE 包含["mialquiler", "mialquiler_post"],这是一个无效类型,应该是字符串、数字或null

我没有指定 MYSQL_DATABASE 属性,但它不起作用。

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

MYSQL_DATABASE 变量允许创建单个数据库,如果指定,则将数据库上的权限授予MYSQL_USER

您可以使用单个数据库来容纳多个架构。

如果您需要创建多个数据库,您可能需要运行一些自定义 SQL,因为 flyway 无法为您创建数据库。 flyway test resources include a mysql example。

【讨论】:

非常感谢您的回答@Matt :)。因此,我可以通过这种方式在 .yml 文件中使用 flyway,例如: command: migrate -url=jdbc:mysql://mysqldb:3306/mi_post -user=user -password=password -eschemas=my_post_schema1 - baselineOnMigrate=true -locations='filesystem:/migrations' 谢谢! :D

以上是关于Docker Compose - 如何在一个 mysql 容器中引用多个模式的主要内容,如果未能解决你的问题,请参考以下文章

跨多个 docker-compose 项目的共享卷 [重复]

Docker部署Docker-compose部署mysql容器及创建数据库失败问题

Docker部署Docker-compose部署mysql容器及创建数据库失败问题

Docker部署Docker-compose部署mysql容器及创建数据库失败问题

使用 docker-compose 运行 MySQL

docker-compose 服务的集中配置