【发布时间】:2020-05-21 14:17:28
【问题描述】:
我正在开发一个“单文件脚本”,用于在 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) 有什么建议吗?
【问题讨论】:
-
set -e以便在启动容器出错时退出脚本。双引号所有”$environmentVariables”,尤其是可能包含标点符号的密码。只需在主机上使用mysql客户端而不是docker exec,或者更好的是,使用股票mysql图像中内置的功能来创建初始用户。