Illuminate\Database\QueryException e Connection refused
Estou usando o php 8.2.
1. No arquivo .env, configurei as informações de conexão do banco de dados: conforme pode ser ver abaixo:
db:
image: mysql:8.4.3
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE:-laravel}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-android18}
MYSQL_PASSWORD: ${DB_PASSWORD:-android18}
MYSQL_USER: ${DB_USERNAME:-root}
volumes:
- ./.docker/mysql/dbdata:/var/lib/mysql
ports:
- "3388:3306"
networks:
- laravel
Como pode ver, eu expus a porta 3388 pois a 3306 já está em uso na minha máquina.
2. Agora veja o arquivo .env:
Ao subir o container do mysql, eu consegui acessar esse container e mostrar as tabelas do banco de dados. Se pudesse enviar imagem por aqui, ficaria melhor de você ver, porém vou tentar colar a saída do terminal:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec
3. Verão do php informada no arquivo Dockerfile é a php:8.2-fpm
Dito tudo isso, ao tentar rodar o comando php artisan migrate de dentro do projeto laravel criado via composer, me deparo com a exceção:
Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: Este host n�o � conhecido. (Connection: mysql, SQL: select exists (select 1 from information_schema.tables where table_schema = 'laravel' and table_name = 'migrations' and table_type in ('BASE TABLE', 'SYSTEM VERSIONED')) as `exists`)
Inicialmente acredito que preciso executar esse comando migrate para continuar a tentar rodar a aplicação laravel "crua". Conseguindo isso, eu decolo para os demais objetivos.
Espero que tenha entendido até onde cheguei e consiga me dá uma ideia. Enquanto isso, irei continuar a checar por uma solução.
Bem , ess parte acabei já resolvendo. ATinha a ver com a porta exposta do container do mysql.
Agora preciso de nova ajuda. Mesmo acessando o mysql via bash, e também pelo sqlyog(pois a porta 3388 está exposta), com o arquito hosts devidamente configurado (127.0.0.1 turbolivery.test 127.0.0.1 db), DB_HOST do arquivo .env com o nome db, o mesmo do container mysql
do arquivo docker-compose.yml; mesmo com tudo isso, ao tentar rodar a aplicação laravel no browser (http://turbolivery.test), me é lançada a seguinte exceção:
SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from `sessions` where `id` = 5cmrI726kAa7vCqlE7YYziQJPPCRtQqstED9C6bq limit 1).
Não pode ser firewal pq eu acesso via bash , não é ? e via sqlyog. Será que terei que adicionar manualmente esse id na tabela gerada no banco de dados?
os seeders não tem dados para isso. Queria que rodasse automaticamente como você apresentou no curso de laravel 11
Este último ja resolvi também. O motivo é que baixando o setup-docker-laravel que tem o docker embutido, por algum motivo não consigo aplicar uma senha própria ao container do mysql.
Altero no arquivo .env
DB_USERNAME=root
DB_PASSWORD=android18
e ao subir o container novamente (depois de apagado executo compose update), e ao entrar no mysql via bash, só é aceita a senha root.
Sofro... :(
Isso tudo para subir um laravel com docker. Manoooo do cé... Pelo menos subi com senha root, mas como não me aquieto com dúvidas, preciso saber o motivo de eu não conseguir usar minha própria senha.
Suspeita: Será que por algum motivo , as variáveis do arquivo .env não estão sendo atribuidas ao docker-compose.yml?
Vamos investigar...
Bem..... entendi que não conseguimos definir uma senha próproa no momento em que o container "sobe" , em virtude de sua definição no arquivo docker-compose.yml.
Portanto o simples fato de eu definir uma senha no environment do mysql, esta não será definida no mysql. Não tinha ficado claro isso , já que , por linha de comando, facilmente já subimos o container com uma senha própria. Seria interessante deixar essas coisas mais evidentes na explicação.
Ele inicia com a senha padrão e se quisermos, mudamos a senha do mysql via bash (ALTER USER 'root'@'%' IDENTIFIED BY 'nova_senha') e alteramos no arquivo .env que é o arquivo usado na conexão do bd quando o servidor precisa.
Olá, Denis!
Tudo bem?
Suas informações de env estão corretas:
DB_HOST=db
DB_PORT=3306
Precisa rodar os comandos dentro do container:
docker compose exec app bash
> php artisan migrate
Vc pode definir a senha do user root com essa environment:
DB_ROOT_PASSWORD=senha_do_root
DB_USERNAME=denis
DB_PASSWORD=android18
Ao fazer isso, delete o container:
docker compose down
E suba novamente:
docker compose up -d
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!