是因为默认情况下,MySQL容器在初始化数据库时只会执行位于docker-entrypoint-initdb.d目录下的.sql和.sql.gz文件,而不会执行shell脚本文件。
要解决这个问题,可以采取以下步骤:
- 确保shell脚本文件具有可执行权限。可以使用chmod命令为脚本文件添加执行权限,例如:chmod +x script.sh。
- 将shell脚本文件的扩展名改为.sql或.sql.gz。这样MySQL容器会将其视为初始化脚本并执行。
- 在shell脚本中使用MySQL的命令行工具(如mysql或mysqldump)来执行需要的操作。例如,可以使用以下命令在脚本中执行SQL语句:
- 在shell脚本中使用MySQL的命令行工具(如mysql或mysqldump)来执行需要的操作。例如,可以使用以下命令在脚本中执行SQL语句:
- 这将使用给定的用户名、密码和数据库名执行脚本文件中的SQL语句。
- 如果需要在初始化过程中执行其他操作,可以考虑使用Docker的ENTRYPOINT或CMD指令来自定义容器启动时的命令。通过创建一个自定义的Docker镜像,可以在容器启动时执行任意的shell脚本。
总结起来,解决docker-entrypoint-initdb.d目录下shell脚本权限被拒绝的问题,需要确保脚本具有可执行权限,并将其扩展名改为.sql或.sql.gz。同时,在脚本中使用MySQL的命令行工具来执行需要的操作。如果需要更多自定义操作,可以考虑创建自定义的Docker镜像。