首页 文章

无法连接到mysql docker镜像

提问于
浏览
3

我有使用mysql / mysql-server docker image的问题 . 我想连接到mysql服务器,创建db,具有所有PRIVILEGES的用户能够创建新模式并在将来运行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

当我做 docker ps 我看到它试图运行liquibase(使用root / qwe123)它失败了:

[错误]无法执行目标org.codehaus.mojo:sql-maven-plugin:1.5:在项目db:null上执行(default-cli),来自服务器的消息:“主机'172.17.0.1'不允许连接到这个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

如果admin用户在创建新架构时出错,则看起来admin只能访问测试数据库:

[错误]无法执行目标org.codehaus.mojo:sql-maven-plugin:1.5:在项目数据库上执行(default-cli):拒绝用户'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;'

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

[错误]无法执行目标org.codehaus.mojo:sql-maven-plugin:1.5:在项目db:null上执行(default-cli),来自服务器的消息:“主机'172.17.0.1'不允许连接到这个MySQL服务器“ - > [帮助1]

对于管理员 - 以下:

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

还尝试使用localhost和127.0.0.1作为DB的主机,始终有连接错误 . 有任何想法吗?

1 回答

  • 1

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

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

    并重新启动mysql实例

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

相关问题