我正在尝试使用 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/