Почему возникает ошибка SQLSTATE[HY000] [2002] Connection refused при использовании Laravel и Docker?

Как исправить ошибку "SQLSTATE[HY000] [2002] Connection refused", возникающую при выполнении миграций в базе данных контейнера Docker, когда DB_HOST указан как название сервиса Docker?
  • 25 мая 2024 г. 16:41
Ответы на вопрос 2
Ошибка SQLSTATE[HY000] [2002] Connection refused может возникать при использовании Laravel и Docker из-за неправильной настройки соединения с базой данных. Обычно это происходит из-за того, что Docker контейнер с базой данных не запущен или не доступен по указанному адресу.

Для исправления ошибки "SQLSTATE[HY000] [2002] Connection refused" при выполнении миграций в базе данных контейнера Docker, когда DB_HOST указан как название сервиса Docker, необходимо убедиться, что контейнер с базой данных запущен и доступен для соединения. Можно проверить это, выполнив команду `docker ps` для просмотра запущенных контейнеров и их статуса.

Кроме того, необходимо убедиться, что настройки подключения к базе данных в файле `.env` Laravel указаны правильно. В частности, DB_HOST должен быть указан как название сервиса Docker контейнера с базой данных, а DB_PORT - порт, на котором слушает база данных внутри Docker контейнера.

Если после проверки контейнер с базой данных запущен и настройки соединения указаны верно, то возможно проблема кроется в сетевых настройках Docker. В этом случае можно попробовать перезапустить контейнер с базой данных или проверить сетевые настройки Docker.

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

В целом, для исправления ошибки "SQLSTATE[HY000] [2002] Connection refused" при использовании Laravel и Docker, необходимо тщательно проверить настройки соединения с базой данных, статус контейнера с базой данных и сетевые настройки Docker.
DB_PORT=3316 - это порт, который ты пробросил из контейнера в хостовую систему, в контейнере MySQL слушает порт 3306 к нему и надо подключаться. 

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