mysql - 如何在 Docker 容器中使用模式初始化 MySQL 数据库?

标签 mysql docker database-schema

我正在尝试使用 MySQL 数据库创建一个容器并向这些数据库添加架构。

我当前的 Dockerfile 是:

FROM mysql
MAINTAINER  (me) <email>

# Copy the database schema to the /data directory
COPY files/epcis_schema.sql /data/epcis_schema.sql

# Change the working directory
WORKDIR data

CMD mysql -u $MYSQL_USER -p $MYSQL_PASSWORD $MYSQL_DATABASE < epcis_schema.sql

为了创建容器,我遵循 Docker 上提供的文档并执行以下命令:

docker run --name ${CONTAINER_NAME} -e MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} -e MYSQL_USER=${DB_USER} -e MYSQL_PASSWORD=${DB_USER_PASSWORD} -e MYSQL_DATABASE=${DB_NAME} -d mvpgomes/epcisdb

但是当我执行这个命令时,Container并没有被创建,在Container状态下可以看到CMD没有执行成功,实际上只执行了mysql命令。

无论如何,有没有办法用架构初始化数据库,还是我需要手动执行这些操作?

最佳答案

我遇到了同样的问题,我想初始化我的 MySQL Docker 实例的架构,但是在进行了一些谷歌搜索并遵循其他人的示例后,我遇到了困难。这是我解决它的方法。

1) 将 MySQL 模式转储到文件中。

mysqldump -h <your_mysql_host> -u <user_name> -p --no-data <schema_name> > schema.sql

2) 使用 ADD 命令将架构文件添加到 Docker 容器中的 /docker-entrypoint-initdb.d 目录。 docker-entrypoint.sh 文件将针对 MySQL 数据库运行此目录中以 ".sql" 结尾的所有文件。

Dockerfile:

FROM mysql:5.7.15

MAINTAINER me

ENV MYSQL_DATABASE=<schema_name> \
    MYSQL_ROOT_PASSWORD=<password>

ADD schema.sql /docker-entrypoint-initdb.d

EXPOSE 3306

3) 启动 Docker MySQL 实例。

docker-compose build
docker-compose up

感谢 Setting up MySQL and importing dump within Dockerfile让我了解 docker-entrypoint.sh 以及它同时运行 SQL 和 shell 脚本的事实!

关于mysql - 如何在 Docker 容器中使用模式初始化 MySQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29145370/

相关文章:

c# - 来自 Docker 容器中 LibreOffice Headless 的 TCP SYN_SENT。

node.js - 在dotnet构建之前在Dockerfile中运行npm脚本

mysql - 无法从 perl 脚本运行 MySQL 存储过程

python - 哪个更好 - 将玩家的库存存储在 JSON(数据库中的文本字段)或直接数据库中?

mysql - 将 Oracle PL/SQL 转换为 Mysql

mysql - 设计在线评估数据库的更好方法

php - 设计具有多个变量的工作调度数据库?

php - WORDPRESS:我刚刚在 wp_user 行上使用 phpMyadmin 创建了一个额外的列,现在我需要每个用户在登录时更新该列

更新到 v1.7.0 后 Docker 提示证书无效

database - 带评分的检查/考试问题/答案的架构