вы пытаетесь подключиться к mysql в localhost
, что (на удивление) является ссылкой на локальный хост.Так как это относительный адрес, внутри контейнера он разрешается как собственный адрес контейнера, и MySQL там не ждет вас ... так что для его решения - просто укажите его ip реального хоста вместо localhost
или 127.0.0.1
.
шаг 1 - исправить .env файл:
DB_HOST=<your_host_ip> #run `ifconfig` and look for your ip on `docker0` network
DB_DATABASE=databasename
DB_USERNAME=laravel_server #not root, since we are going to allow this user remote access.
DB_PASSWORD=testpassword
шаг 2 - создать выделенного пользователя:
открыть свой mysql: mysql -u root -p
, введите пароль пользователя root и выполните следующее:
CREATE USER 'laravel_server'@'%' IDENTIFIED BY 'testpassword';
GRANT ALL PRIVILEGES ON databasename.* TO 'laravel_server'@'%';
FLUSH PRIVILEGES;
мы создали пользователя и дали ему разрешения.
шаг 3 - откройте mysql для удаленного доступа:
мы должны сделать так, чтобы он прослушивал все интерфейсы, а не только localhost, и поэтому мы выполняем:
sudo sed 's/.*bind-address.*/bind-address=0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf
(вам будет предложено ввести пароль. Эта команда просто заменяет строку вфайл конфигурации mysql)
шаг 4 - обновление:
- в каталоге проекта:
php artisan config:cache
service mysql restart
затем создайте докер и снова запустите новый контейнер.это должно работать для вас.