2014-12-23 3 views
2

Итак, я могу связаться с моим локальным хостом через Docker, запустив контейнер с --add-host=localbox:192.168.59.3. ping localbox работает просто отлично. Проблема в том, что я не могу даже получить ответ от MySQL Server. mysql -h localbox, который отлично работает за пределами контейнера докера, просто получает меня ERROR 2003 (HY000): Can't connect to MySQL server on 'localbox' (111) изнутри.Подключение к серверу MySQL на локальном хосте через докере

Я сделал GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

я добавил bind-address = 0.0.0.0 в /etc/my.cnf. Ничто из этого не помогает. Что дает?

Контекст: Я запускаю все это через boot2docker на OS X Yosemite.

+0

Похоже, что localbox не признан допустимым именем хоста. Что произойдет, если вы используете IP-адрес вместо localbox из контейнера? – mgaido

+0

localbox является допустимым именем хоста. Как я уже сказал, pinging localbox отлично работает. – Eli

+0

Вы имеете в виду пингование из контейнера? – mgaido

ответ

3

Итак, получается, что это ошибка доморощенного с действительно сомнительным дизайнерским решением. Вы запускаете mysql-сервер в homebrew, запустив рекомендованный launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist. Но тогда, исследуя этот файл, вы обнаружите, что адрес привязки жестко запрограммирован!

<array> 
    <string>/usr/local/opt/mysql/bin/mysqld_safe</string> 
    <string>--bind-address=127.0.0.1</string> 
    <string>--datadir=/usr/local/var/mysql</string> 
    </array> 

Таким образом, независимо от того, что вы делаете в любой из ваших my.cnf файлов, это не всегда будет связан с 127.0.0.1, и вы никогда не будете иметь возможность запросить из контейнера. Мое исправление просто редактирует этот файл напрямую, чтобы не предоставлять адрес привязки, поэтому мы можем позволить /etc/my.cnf сделать это для нас. В качестве альтернативы, хотя я бы не рекомендовал его, вы можете просто изменить адрес привязки непосредственно в этом файле.

1

Вы можете добавить сеть Маке хоста на ваш Docker контейнер (работает в boot2docker) с

--add-host=dh:10.0.2.2 

как часть вашей команды Docker выполнения или использования

extra_hosts: 
    - "dh:10.0.2.2" 

в вашем Докер-композе. yml-файл.

После этого подключения к MySQL из контейнера с клиентом установлен так просто, как (например):

$ mysql -h dh -uroot -p1234 

Это решение не требует изменения настроек для вашей установки MariaDB/MySQL, даже если привязан к 127.0.0.0.

+1

Благодаря http://stackoverflow.com/questions/30495905/accessing-host-machine-as-localhost-from-a-docker-container-thats-also-inside-a и https://forums.docker.com/t/access-host-not-vm-from-inside-container/11747/4 для того, чтобы направить меня к этому ответу. – untitled90

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