首页 > 解决方案 > 用于在 docker MySQL 中创建默认用户的 Bash 脚本

问题描述

我正在开发一个用于在 Docker 中运行 MySQL 数据库的“一个文件脚本”,并且有很多有用的想法。该脚本应该使用 MySQL 创建一个容器,然后创建一个具有最大权限的新用户。

当我尝试从bash 脚本连接到 MySQL 命令行时,就会出现问题。部分脚本:

#!/bin/bash

mysqlContainerName=project-mysql
mysqlRootUsername=root
mysqlRootPassword=root_pass
mysqlUsername=db_user
mysqlPassword=db_pass
mysqlDb=project_db

echo -e "Creating container \e[31m$mysqlContainerName\e[0m"
docker run --rm -d \
  --name=$mysqlContainerName \
  --network api-network \
  -p 3306:3306 \
  -v /opt/docker-data/mysql-volumes:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=$mysqlRootPassword \
  -e MYSQL_DATABASE=$mysqlDb \
  -t mysql:8.0.19

docker exec $mysqlContainerName \
  mysql -h 127.0.0.1 -P 3306 --protocol=tcp \
  -uroot -p$mysqlRootPassword -e "CREATE USER '$mysqlUsername'@'localhost' IDENTIFIED BY 
'$mysqlPassword';"

所以,容器成功创建,但我一直收到一条错误消息:ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111) 有 什么建议吗?

标签: mysqlbashdockerubuntu

解决方案


所以,经过几个小时的搜索,我找到了解决方案。添加了bash -c参数并在引号中连接到 MySQL 和查询。

docker exec $mysqlContainerName bash -c "mysql -h172.21.0.1 -P 3306 --protocol=tcp -u$mysqlRootUsername -p$mysqlRootPassword -e \"CREATE USER '$mysqlUsername'@'localhost' IDENTIFIED BY '$mysqlPassword';\"; exit;"

推荐阅读