2015-09-02 1 views
29

У меня есть работающий образ докер MySQL, следуя что докер-compose.yml файл выглядит следующим образом:Подключиться к контейнеру Docker MySQL из localhost?

db: 
    image: mysql 
    environment: 
    MYSQL_ROOT_PASSWORD: "" 
    MYSQL_ALLOW_EMPTY_PASSWORD: yes 
    ports: 
    - "3306:3306" 

Это прекрасно работает.

Мой вопрос: Как подключиться к экземпляру MySQL, запущенному в этом контейнере из командной строки mysql client на моем хосте (my macbook)?

Для уточнения:

  • У меня есть MacBook с Докер установлен
  • У меня есть Docker контейнер с MySQL
  • Я хочу подключиться к тузд экземпляра, запускаемого на вышеупомянутом контейнере из терминала на my macbook
  • Я НЕ хочу, чтобы команда docker сделала это возможным. Скорее, я хочу использовать клиента mysql непосредственно из терминала (без туннелирования через контейнер докера).

У меня нет MySQL, работающего локально, поэтому порт 3306 должен быть открытым и готовым к использованию.

Команда, я использую для запуска контейнера является: docker-compose run

+0

Это выглядит особенно актуально: http://serverfault.com/questions/688513/cant-access-mysql-docker-container-from-the-host – Caleb

+0

как докер установлен на вашем MacBook? docker toolbox, boot2docker или kitematic? – Thomasleveil

+0

'boot2docker' Панель инструментов докеров была ненадежной. У меня есть открытые проблемы в их github, и если/когда он станет более стабильным, я буду использовать его, но теперь 'boot2docker' управляет виртуальными машинами, и он работает нормально. – Caleb

ответ

41

Использование docker-compose up

Поскольку вы опубликовали порт 3306 на вашем Docker хозяина, от этого самого хозяина вы бы подключиться к 127.0.0.1:3306.

Использование docker-compose run

В этом случае раздел отображение портов файла docker-compose.yml игнорируется. Для того, чтобы иметь раздел отображение портов считается, вы должны добавить --service-ports вариант:

docker-compose run --service-ports db 

Дополнительное примечание

Учтите, что по умолчанию, клиент MySQL пытается подключиться, используя сокет UNIX, когда вы говорите это, чтобы подключиться до localhost. Так что использовать 127.0.0.1 и не localhost:

$ mysql -h 127.0.0.1 -P 3306 -u root 

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.26 MySQL Community Server (GPL)

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 -h localhost -P 3306 -u root 

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

+0

спасибо за подсказку. Я пробовал использовать '127.0.0.1' (и' 192.168.59.103'), не работал :( – Caleb

+0

Любые другие идеи? @Thomasleveil – Caleb

+0

Извините, я никогда не использовал boot2docker. Возможно, https://github.com/docker/docker/issues/4007 поможет – Thomasleveil

-1

Подключение к MySQL через {Host IP}: 3306, так как вы разоблачили внутренний порт хоста, как 3306. Если вам необходимо получить доступ к MySQL CLI, вам нужно будет пойти docker exec -it mycontainer bash, и вы поместите вас внутрь контейнера, чтобы получить доступ к инструментам, установленным с помощью MySQL, если вы не установили их локально на хосте o/s.

8

Я получил его !! Ответ заключается в использовании опции --service-ports при запуске docker-compose:

docker-compose run --service-ports db (оригинальный докер-состав.yml файл отлично работает)

Спасибо всем за помощь!

0

Ваш yml-файл выглядит хорошо.

Вы можете напрямую подключить Docker контейнер непосредственно, как это уже сопоставляются с локальным портом 3306. Просто Гото терминала и запустить

mysql -h 127.0.0.1 -u root -p 

Примечание: вы должны иметь доступ к командной строке MySQL. Если команда mysql покажет ошибку, проверьте '/ usr/local/mysql/bin', иначе вы не сможете подключиться к серверу mysql. Другими словами, на вашем компьютере должен быть клиент mysql.

0

Если ваш хост Docker MySQL правильно работает вы можете подключиться к нему с локального компьютера, но вы должны указать хост, порт и протокол, как это:

mysql -h localhost -P 3306 --protocol=tcp -u root 

Поскольку вы работаете MySQL в Докер контейнере, розетка недоступен, и вам необходимо подключиться через TCP. Значение «-protocol» в команде mysql изменит это значение.

0

Это сработало для меня.

/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p 
+0

Можете ли вы объяснить это более подробно, как именно он работает и где он использовался? –

+0

- это место, где установлена ​​mysql. поэтому команда «/ usr/local/mysql/bin/mysql» будет запускать исполняемый файл mysql. просто mysql сам по себе не работает в некоторых случаях, поскольку он зависит от того, как вы установили mysql на свой mac – Swannie

+0

Я использовал его в контейнере mysql 5.7, который запускался через docker-compose, и использовал его с докером-роем, используя докер-машину – Swannie