2017-01-17 157 views
2

我有使用mysql/mysql-server docker镜像的问题。 我想连接到MySQL服务器,创建数据库,用户与所有特权有能力创建新的架构,并在未来运行liquibase。无法连接到mysql docker镜像

我运行容器是这样的:

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),它与失败:

[ERROR] Failed to execute goal org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli) on project db: null, message from server: "Host '172.17.0.1' is not allowed to connect to this MySQL server" -> [Help 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 

与管理员用户有错误创造新的模式,它貌似管理员只测试数据库的访问:

[ERROR] Failed to execute goal org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli) on project db: Access denied for user 'admin'@'%' to database 'test2' -> [Help 1]

与根以下错误:

[ERROR] The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

也试过设置权限在init命令管理:

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;' 

在这情况下为根用户有错误:

[ERROR] Failed to execute goal org.codehaus.mojo:sql-maven-plugin:1.5:execute (default-cli) on project db: null, message from server: "Host '172.17.0.1' is not allowed to connect to this MySQL server" -> [Help 1]

的管理员 - 以下内容:

12:13:57 [ERROR] The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

还试图用本地主机,127.0.0.1作为主机数据库,总是有误差的连接。 任何想法?

+0

除非你使用的是这里没有提到对数据的外部存储卷,每个'搬运工run'可以创建新的数据访问商店。你可能想尝试使用'docker exec'而不是'docker run'运行'CREATE USER'尝试。这将使用已经运行的容器,而不是创建另一个新的容器。 –

+0

难点在于我想在Jenkins工作中运行Docker镜像。 而在詹金斯,我无法为docker exec打开-ti模式。 –

+0

所以,我可以这样添加用户: '须藤搬运工运行--name分贝-e MYSQL_ROOT_PASSWORD = qwe123 -e MYSQL_DATABASE =测试-d -p 3306:3306的MySQL/MySQL的服务器:5.6 --lower的病例表 - names = 1 docker exec -ti db mysql -uroot -pqwe123 CREATE USER'admin' @'localhost' IDENTIFIED BY“qwe123”; 授予*。*到'admin' @'localhost'的所有特权与授予选项; CREATE USER'admin' @'%'IDENTIFIED BY“qwe123”; 授予*上的所有特权。*使用授权选项到'admin' @'%' FLUSH PRIVILEGES;' –

回答

0

您应该允许MySQL内的用户从主机的IP连接。 不要忘记在MySQL

改变用户

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

后刷新权限并重启MySQL实例

也有机会通过向my.cnf中有mysql绑定到127.0.0.1。如果是这样的 - 绑定改为0.0.0.0得到它通过任何IP

+0

尝试添加'FLUSH PRIVILEGES;'用户创建之后,但没有帮帮我。 –

+0

'''GRANT CREATE USER ON * * TO '根' @ '%';''' 并重启MySQL实例 – podarok

+0

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