Подключиться к контейнеру Docker MySQL из localhost?
У меня есть образ docker mysql, следующий за файлом docker-compose.yml:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: yes
ports:
- "3306:3306"
Это отлично работает.
Мой вопрос: как я могу подключиться к экземпляру MySQL, запущенному на этом контейнере, из командной строки mysql-клиента на моем хосте (my macbook)?
Чтобы уточнить:
- У меня есть macbook с установленной Docker.
- У меня есть контейнер докеров с mysql
- Я хочу подключиться к экземпляру mysql, запущенному в вышеупомянутом контейнере из терминала на моем macbook
- Я НЕ хочу использовать команду
docker
, чтобы сделать это возможным. Скорее, я хочу использовать клиент mysql
непосредственно из терминала (без туннелирования через контейнер докеров).
У меня нет MySQL, работающего локально, поэтому порт 3306 должен быть открытым и готовым к использованию.
Команда, которую я запускаю для запуска контейнера: docker-compose run
Ответы
Ответ 1
Использование docker-compose up
Поскольку вы опубликовали порт 3306
на своем докере-хосте, с этого хоста вы подключитесь к 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
Добро пожаловать на монитор MySQL. Команды заканчиваются; или \g. Ваш идентификатор соединения с MySQL равен 1 Версия сервера: 5.6.26 Сервер сообщества MySQL (GPL)
Авторское право (c) 2000, 2015, Oracle и/или его аффилированные лица. Все права защищены.
Oracle является зарегистрированным товарным знаком корпорации Oracle и/или ее ветки. Другие названия могут быть товарными знаками соответствующих владельцы.
Введите "help"; или '\ h' для получения справки. Введите '\ c', чтобы очистить текущую инструкцию ввода.
MySQL >
$ mysql -h localhost -P 3306 -u root
ERROR 2002 (HY000): невозможно подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)
Ответ 2
Я понял! Ответ заключается в использовании опции --service-ports
при запуске docker-compose
:
docker-compose run --service-ports db
(исходный файл docker-compose.yml отлично работает)
Спасибо всем за помощь!
Ответ 3
Простой способ входа в MySQL внутри образа Docker:
sudo docker exec -it <IMAGE_ID> mysql -u root -p
для учетной записи mySQL root
пароль по умолчанию не установлен, его значение ПУСТО, просто нажмите клавишу ввода/возврата, если вы не изменили пароль root.
При успешном выполнении приведенная выше команда выдает приглашение mysql.
Ура!
Ответ 4
Ваш yml файл выглядит хорошо.
Вы можете напрямую подключить контейнер докеров напрямую, поскольку он уже сопоставлен с локальным портом 3306.
Просто перейдите в терминал и запустите
mysql -h 127.0.0.1 -u root -p
Примечание. У вас должен быть доступ к командной строке mysql. Если команда mysql покажет ошибку, проверьте '/usr/local/mysql/bin', иначе вы не сможете подключиться к серверу mysql. Другими словами, у вас должен быть клиент mysql на вашем компьютере.
Ответ 5
это сработало для меня.
/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p
Ответ 6
Подключитесь к MySQL через {host ip}: 3306, так как вы открыли внутренний порт для своего хоста как 3306. Если вам нужно получить доступ к инструментам командной строки MySQL, вам нужно будет пойти docker exec -it mycontainer bash
, это поместит вас внутрь контейнер для доступа к инструментам, установленным с MySQL, если вы не устанавливаете их локально на хосте o/s.
Ответ 7
Если ваш хост Docker MySQL работает правильно, вы можете подключиться к нему с локальной машины, но вы должны указать хост, порт и протокол следующим образом:
mysql -h localhost -P 3306 --protocol=tcp -u root
Поскольку вы используете MySQL внутри контейнера Docker, сокет недоступен, и вам нужно подключиться через TCP. Значение "--protocol" в команде mysql изменит это.
Ответ 8
Вы можете использовать 0.0.0.0 в качестве вашего хоста