无法连接到 mysql docker 映像

Oks*_*kul 5 mysql liquibase jenkins docker docker-container

我在使用 mysql/mysql-server docker 映像时遇到问题。我想连接到 mysql 服务器,创建数据库,拥有所有特权的用户,以便将来能够创建新模式并运行 liquibase。

我像这样运行容器:

sudo docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test \
  -d -p 3306:3306 mysql/mysql-server:5.6 --lower-case-table-names=1
Run Code Online (Sandbox Code Playgroud)

当我这样做时,docker ps我看到它正在运行,但是当我尝试运行 liquibase(使用 root/qwe123)时,它失败了:

[错误] 无法执行目标 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli) on project db: null,来自服务器的消息:“Host '172.17.0.1' is not allowed to connect to此 MySQL 服务器”-> [帮助 1]

与用户一起尝试:

sudo docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test \
  -e MYSQL_USER=admin -e MYSQL_PASSWORD=qwe123 -d -p 3306:3306 \
  mysql/mysql-server:5.6 --lower_case_table_names=1
Run Code Online (Sandbox Code Playgroud)

管理员用户在创建新架构时出错,看起来管理员只能访问测试数据库:

[错误] 无法在项目 db 上执行目标 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli): Access denied for user 'admin'@'%' 到数据库 'test2' -> [帮助 1]

使用 root 出现以下错误:

[ERROR] 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。无法从服务器读取响应。预期读取 4 个字节,在连接意外丢失之前读取 0 个字节。

还尝试在 init 命令中为 admin 设置权限:

docker run --name db -e MYSQL_ROOT_PASSWORD=qwe123 -e MYSQL_DATABASE=test -d \
  -p 3306:3306 mysql/mysql-server:5.6 --lower_case_table_names=1 \
 '--init-connect=CREATE USER `admin`@`localhost` IDENTIFIED BY "qwe123"; GRANT ALL PRIVILEGES ON *.* TO `admin`@`localhost` WITH GRANT OPTION; CREATE USER `admin`@`%` IDENTIFIED BY "qwe123";GRANT ALL PRIVILEGES ON *.* TO `admin`@`%` WITH GRANT OPTION;FLUSH PRIVILEGES;'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,root 用户有错误:

[错误] 无法执行目标 org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli) on project db: null,来自服务器的消息:“Host '172.17.0.1' is not allowed to connect to此 MySQL 服务器”-> [帮助 1]

对于管理员 - 以下内容:

12:13:57 [ERROR] 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。无法从服务器读取响应。预期读取 4 个字节,在连接意外丢失之前读取 0 个字节。

还尝试使用 localhost 和 127.0.0.1 作为数据库的主机,总是有连接错误。有任何想法吗?

pod*_*rok 3

您应该允许 MySQL 中的用户从您主机的 IP 进行连接。在 MySQL 中更改用户后不要忘记刷新权限

GRANT CREATE USER ON *.* TO 'root'@'%';

并重启mysql实例

也有机会通过 my.cnf 将 mysql 绑定到 127.0.0.1。如果是这样 - 将绑定更改为 0.0.0.0 以通过任何 IP 访问它

  • 太好了,如果我这样做,我可以使用 root 用户连接到数据库: `docker run -p 3306:3306 -v /tmp:/tmp --name db --detach -e MYSQL_ROOT_PASSWORD="qwe123" -e MYSQL_ROOT_HOST=% -e MYSQL_DATABASE=social -d mysql/mysql-server:5.6 --lower_case_table_names=1 --init-connect='将 *.* 上的创建用户授予'root'@'%';刷新权限;'` (3认同)