【问题标题】:Bash script for creating default user in docker MySQL用于在 docker MySQL 中创建默认用户的 Bash 脚本
【发布时间】: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 图像中内置的功能来创建初始用户。

标签: mysql bash docker ubuntu


【解决方案1】:

所以,经过几个小时的搜索,我找到了解决方案。 添加了 bash -c 参数并在 quotes 中连接到 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;"

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 2012-11-21
    • 2020-07-21
    • 2020-04-03
    • 2014-06-16
    • 1970-01-01
    • 2014-06-13
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多