2015-10-16 6 views
3

Я создал мой контейнер, как это:Доступ к MySQL от хоста к контейнеру кли

$ docker run -d -p 33060:3306 myimage 

Затем я пытаюсь подключить от хоста к серверу MySQL в контейнере:

$ mysql -uroot -proot -P 33060 

Я получил эту ошибку:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

Это странно, потому что в Navicat только я изменил порт и работает отлично: enter image description here

Но если у меня есть IP-адрес контейнера:

$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' mycontainer 
172.17.0.55 

Тогда я могу подключиться к серверу MySQL успешно:

$ mysql -uroot -proot -h 172.17.0.55 

Но это утомительно должны проверить IP каждый Я создаю новый контейнер для подключения к mysql. Есть ли какие-либо настройки, которые я могу сделать, чтобы упростить эту задачу?

ответ

6

Это не проблема Докера. По умолчанию клиент командной строки mysql будет подключаться к локальному (Unix), а не сетевому, даже если вы укажете -P.

Это поведение описано в the documentation:

On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given

Вы должны пройти опцию -hlocalhost, или вы можете установить по умолчанию соединения в /etc/mysql/my.cnf

Смежные вопросы