Почему мне нужно использовать «localhost» для подключения к Docker MySQL DB в Windows?


0

В настоящее время я нахожусь в процессе изучения Docker (использую его в Windows и Linux), и есть одна вещь, которую я не могу понять, и я думаю, что это лучше объяснить на примере.

Я запускаю открытые порты контейнера MySQL и затем подключаюсь к нему через клиент MySQL, такой как MySQL Workbench. В Linux / Ubuntu я могу подключиться к БД, работающей внутри контейнера, по ее IP-адресу, который я получаю, выполнив:

docker inspect CONTAINER_NAME

Это имеет смысл для меня, именно так я бы подключился к базе данных, работающей на сервере.

Однако в Windows этот подход не работает. Я на самом деле должен подключиться, localhostа не IP-адрес контейнера. Я понимаю, что это как-то связано с тем, что в Windows контейнеры работают внутри виртуальной машины Linux, но в этом случае я должен использовать IP-адрес виртуальной машины для подключения к ней.

Может ли кто-нибудь объяснить мне, почему это работает так, как работает? Я изо всех сил пытаюсь понять это (я все еще младший разработчик), и я бы лучше понял, как это работает, чем просто запоминать команды / IP-адреса для разных ОС.


1
Я не публикую ответ, так как не уверен на 100%, но я считаю, что ваша проблема в том, что конфигурация MySQL в самом Docker не позволяет работать в сети. Это означает, что переадресация портов происходит, поэтому localhost:3306подключается к [CONTAINER_NAME]:3306. Но MySQL по умолчанию нигде не привязывается к 0.0.0.0via bind-address: 0.0.0.0in my.cnfв контейнере. Или пользовательские разрешения для MySQL подключены localhostвместо подстановочного знака %. Каково именно ваше сообщение об ошибке?
JakeGould

Если я пытаюсь подключиться, используя IP-адрес контейнера, он просто говорит, что не может подключиться к данному IP-адресу: 10:19:43 Не удалось подключиться, возможно, сервер не работает. Не удается подключиться к серверу MySQL в 172.17.0.2 (10060)
Джереми,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.