[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Denis
Criador Denis 29/11/2024

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:

 

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=android18

 

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. 

Criador Denis 29/11/2024

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

Denis
Criador Denis 29/11/2024

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...

Denis
Criador Denis 29/11/2024

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.

Denis
Manager Carlos Ferreira 29/11/2024

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

Carlos Ferreira
Manager Carlos Ferreira 29/11/2024

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

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!