PhpStorm - Как подключиться к MySQL через Docker - PullRequest
1 голос
/ 06 марта 2019

Я работаю с PhpStorm 2018.3.4, Docker, MySQL и Ubuntu. Я безуспешно пытался настроить MySQL с контейнером Docker network_mysql.

Сначала я попробовал эту конфигурацию:

First configuration

Это дало мне эту ошибку:

Result of the first configuration

Затем я попробовал это:

Second configuration

Этот дал мне эту другую ошибку.

Result of the second configuration

Я что-то упустил? Есть ли другое место, где я должен что-то настроить?

docker ps вывод:

docker ps

Здесь docker network ls:

docker network ls

Для команды docker inspect network_mysql приведена ссылка на описание: https://pastebin.com/9LmeAkc8

Вот конфигурация docker-compose.yml: https://pastebin.com/DB4Eye4y

Я пытался поставить - "3306:3306" в дополнение к разделу wex_server_proxy безрезультатно.

Файл, который нужно изменить, был следующим:

https://pastebin.com/TPBQNCDZ

Я добавил секцию ports, открывая порт 3306 :) А потом все работает.

1 Ответ

4 голосов
/ 07 марта 2019

Решение

Я заметил, что вы не сопоставляете порт контейнера mysql. Если вы это сделаете, вы увидите это из команды docker ps:

...   0.0.0.0:3306->3306/tcp       network_mysql

Post not mapped out for mysql container

Контейнер network_mysql подключен к сети мостового типа, которая называется tmp_wex_net. Это означает, что контейнер недоступен для хоста по имени контейнера.

Похоже, вы используете для стека определение docker-compose.yml. Чтобы иметь возможность доступа к контейнеру с хоста, вам нужно использовать раздел ports в определении составления для этого контейнера:

serivces:
  mysql:
    ...
    ports:
      - "3306:3306"
    ...

Если вы начинаете с docker run, то вы можете выполнить то же самое с:

docker run -p 3306:3306 --name network_mysql --network="tmp_wex_net" -d mysql

И затем используйте localhost в имени хоста настроек вашего соединения в PHPStorm. Как это:

Host : localhost

Порт : 3306

База данных : сеть


Проблема

Причина, по которой вы не можете подключиться, заключается в том, что имя хоста network_mysql, указанное вами в настройках соединения, не разрешается ни на один хост, о котором ваши машины знают.

Имя контейнера Docker-контейнера не является DNS-именем, которое может разрешать Docker-узел.

Если вы не указали никакой сети для своего контейнера mysql, то он подключен к мостовой сети по умолчанию. И если вы создали новую сеть, не указав тип - по умолчанию также будет использоваться драйвер моста.

Чтобы получить доступ к контейнеру с хоста, вам необходимо:

  1. Подключить контейнер к сети хоста
  2. Или из контейнера в мостовой сети сопоставьте порт с хостом, как предложено в приведенном выше решении. Затем вы можете обратиться к специально назначенному порту в этом контейнере с помощью localhost:<portnum> с хост-компьютера.
...