Docker: Unable to connect mysql in container

  docker, question
  • Environment

    • Macbook pro 10.10

    • DockerToolbox 1.8 & Docker 1.8.2

  • Let’s look at the error output first.

$ mysql -uroot -p -h192.168.99.100 -P3306
 Enter 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' failed
 error: '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 process

  • Container Status-Port Mapping

$ docker ps -l
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
 b20584bc086e        sunzy/mysql         "/usr/bin/mysqld_safe"   21 minutes ago      Up 21 minutes       0.0.0.0:3306->3306/tcp   mysql
  • IP of host

$ docker-machine ls
 NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
 default   *        virtualbox   Running   tcp://192.168.99.100:2376
 $ docker-machine ls
 NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
 default   *        virtualbox   Running   tcp://192.168.99.100:2376
  • PING

$ ping 192.168.99.100                                                                                                                                                                                      1 ↵
 PING 192.168.99.100 (192.168.99.100): 56 data bytes
 64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.347 ms
 64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.388 ms
 64 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 refused
 telnet: Unable to connect to remote host
  • Connect inside the container

# mysql -uroot -p
 Enter password:
 Welcome to the MySQL monitor.  Commands end with ;  or \g.
 Your MySQL connection id is 4
 Server 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 its
 affiliates. Other names may be trademarks of their respective
 owners.
 
 Type 'help;'  or '\h' for help. Type '\c' to clear the current input statement.
 
 mysql>
 mysql>
  • Mysql allows any IP connection

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 |
 +------------------+--------------+-------------------------------------------+

It suddenly occurred to me that vagrant had encountered this kind of situation before, but what the newspaper said was2013-Lost connection to MySQL server at ‘reading initial communication packetError = >Onlookers

  1. Open mysql configuration filesudo vim /etc/mysql/my.cnf

  2. findbind-address, change 127.0.0.1 to 0.0.0.0 or comment out the line

  3. Restart mysql

Have a try, normal