如何向MySQL Docker容器添加启动脚本?

5
我启动了一个带有MySQL的Docker容器。
实际上我想在MySQL Workbench中创建一个新的用户和新的表格。

这是我的Docker运行命令:
docker run -p 3306:3306 --name mysql-server -v ~/Development/web/myproject/docker/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

我的问题是:
如何添加SQL启动脚本(仅用于容器的第一次启动),以创建我的用户和表格?
我需要执行哪些步骤?

谁能帮助我?
非常感谢!
1个回答

18
您需要通过MYSQL_USERMYSQL_PASSWORD环境变量创建用户,并使用/docker-entrypoint-initdb.d卷映射包含启动脚本(.sh, .sql, .sql.gz)的目录。
docker run -p 3306:3306 --name mysql-server \ 
 -v ~/Development/web/myproject/docker/mysql:/var/lib/mysql \
 -v ~/Development/web/myproject/docker/yourstartupscripts:/docker-entrypoint-initdb.d \
 -e MYSQL_ROOT_PASSWORD=root \
 -e MYSQL_USER=youruser \
 -e MYSQL_PASSWORD=youruserpassword \
 -d mysql:latest

Explanation from: https://hub.docker.com/_/mysql/

MYSQL_USER, MYSQL_PASSWORD
这些变量是可选的,用于创建新用户并设置该用户的密码。该用户将被授予指定由 MYSQL_DATABASE 变量的数据库的超级用户权限(请参见上文)。要创建用户,两个变量都是必需的。

初始化新实例
当容器首次启动时,将创建一个具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行在 /docker-entrypoint-initdb.d 中找到的具有扩展名 .sh.sql.sql.gz 的文件。文件将按字母顺序执行。您可以通过将 SQL 转储文件挂载到该目录中轻松填充 MySQL 服务,并提供自定义镜像以包含贡献数据。SQL 文件默认将导入到由 MYSQL_DATABASE 变量指定的数据库中。


谢谢 -v ~/Development/web/myproject/docker/yourstartupscripts:/docker-entrypoint-initdb.d -> 这就是我要找的 :) - m1well
通过脚本创建新用户和在Docker运行命令中创建新用户有何区别? - m1well
2
@m1well,您可以在此处查看有关如何创建用户的详细信息:https://github.com/docker-library/mysql/blob/0590e4efd2b31ec794383f084d419dea9bc752c4/5.7/docker-entrypoint.sh#L166-L174 - adam187
啊,好的 - 所以这和我在我的脚本中做的方式是一样的。那我更喜欢我的脚本 :) -- 谢谢! - m1well
在任何后续的Docker启动中,脚本都不会被执行对吧? - MADforFUNandHappy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接