Docker:无法连接容器中的mysql

【字号: 日期:2023-03-04浏览:35作者:雯心

问题描述

环境

Macbook pro 10.10

DockerToolbox 1.8 & Docker 1.8.2

先看一下错误输出吧

$ mysql -uroot -p -h192.168.99.100 -P3306Enter password: ERROR 2003 (HY000): Can’t connect to MySQL server on ’192.168.99.100’ (61)$ mysqladmin -h192.168.99.100 --port=3306 version 127 ↵mysqladmin: connect to server at ’192.168.99.100’ failederror: ’Can’t connect to MySQL server on ’192.168.99.100’ (61)’Check that mysqld is running on 192.168.99.100 and that the port is 3306.You can check this by doing ’telnet 192.168.99.100 3306’DEBUG的过程

容器状态&端口映射

$ docker ps -l CONTAINER IDIMAGE COMMAND CREATED STATUS PORTS NAMESb20584bc086esunzy/mysql '/usr/bin/mysqld_safe' 21 minutes ago Up 21 minutes 0.0.0.0:3306->3306/tcp mysql

宿主机的IP

$ docker-machine lsNAME ACTIVE DRIVER STATE URL SWARMdefault *virtualbox Running tcp://192.168.99.100:2376 $ docker-machine lsNAME ACTIVE DRIVER STATE URL SWARMdefault *virtualbox Running tcp://192.168.99.100:2376

PING

$ ping 192.168.99.1001 ↵PING 192.168.99.100 (192.168.99.100): 56 data bytes64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.347 ms64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.388 ms64 bytes from 192.168.99.100: icmp_seq=2 ttl=64 time=0.272 ms

Telnet

$ telnet 192.168.99.100 3306 1 ↵Trying 192.168.99.100...telnet: connect to address 192.168.99.100: Connection refusedtelnet: Unable to connect to remote host

在容器内连接

# mysql -uroot -pEnter password: Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 4Server version: 5.5.44-0ubuntu0.14.04.1 (Ubuntu)Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type ’help;’ or ’h’ for help. Type ’c’ to clear the current input statement.mysql> mysql>

mysql允许任意IP连接

mysql> select user,host,password from mysql.user;+------------------+--------------+-------------------------------------------+| user | host | password |+------------------+--------------+-------------------------------------------+| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || root | e611e15f9c9d | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || root | ::1 | || debian-sys-maint | localhost | *1BD91232C0D2D2B5500129217CEF09B7EE71ABEC || root | % | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |+------------------+--------------+-------------------------------------------+

问题解答

回答1:

突然想起来以前用vagrant也遇到这种情况,不过那个报的是2013-Lost connection to MySQL server at ‘reading initial communication packet错误=>围观

打开mysql配置文件 sudo vim /etc/mysql/my.cnf

找到bind-address,把127.0.0.1改成0.0.0.0或者注释掉该行

重启mysql

试了一下,正常了

回答2:

宿主机的防火墙 开着么? sudo service iptables status 看看。

在宿主机上 执行 sudo netstat -lnp | grep 3306 看看端口3306 被哪个进程使用中。

回答3:

docker run --name djistore_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6.27 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

连接到该 MySQL 服务

mysql -h 192.168.99.100 -u root -p

相关的日志

➜ ~ mysql -h 192.168.99.100 -u root -pEnter password:Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 1Server version: 5.6.27 MySQL Community Server (GPL)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type ’help;’ or ’h’ for help. Type ’c’ to clear the current input statement.mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema |+--------------------+3 rows in set (0.01 sec)

相关文章: