Подтвердить что ты не робот

Подключиться к контейнеру 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

4b9b3361

Ответ 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 в качестве вашего хоста