Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

host.docker.internal' is not allowed to connect to this MySQL server

Segui os passos fornecidos pelo instrutor e obtive a seguinte mensagem do servidor:

PDOException Object
(
    [message:protected] =>; SQLSTATE[HY000] [1130] Host 'host.docker.internal' is not allowed to connect to this MySQL server
    [string:Exception:private] =>; 
    [code:protected] =>; 1130
    [file:protected] =>; /var/www/html/funcoes.php
    [line:protected] =>; 7
    [trace:Exception:private] =>; Array
        (
            [0] =>; Array
                (
                    [file] =>; /var/www/html/funcoes.php
                    [line] =>; 7
                    [function] =>; __construct
                    [class] =>; PDO
                    [type] =>; ->;
                    [args] =>; Array
                        (
                            [0] =>; mysql:host=192.168.0.10;dbname=empresa
                            [1] =>; root
                            [2] =>; q1w2e3r4
                        )
                )
            [1] =>; Array
                (
                    [file] =>; /var/www/html/index.php
                    [line] =>; 6
                    [args] =>; Array
                        (
                            [0] =>; /var/www/html/funcoes.php
                        )
                    [function] =>; include
                )
        )
    [previous:Exception:private] =>; 
    [errorInfo] =>; 
)

O parâmetro host no arquivo 'bancodados.php' foi devidamente configurado com o meu IP, mas por alguma razão não funcionou.

O sevidor informa o seu próprio IP na página de acesso, que no meu caso é 172.26.0.3. Em um processo de tentativa e erro defini o parâmetro host como 172.26.0.1, o que levou ao funcionamento da página.

Depois utilizei-me do docker inspect nesse container e descobri que esse IP é o IP de gateway do container.

Tentei colocar o IP do container do mysql como valor para o atributo host mas não funcionou.

Se possível gostaria que alguém me auxiliasse a compreender melhor o porquê de só ter funcionado com esse IP e não ter funcionado nem com o IP da minha máquina e nem com o IP do container do mysql.

2 respostas
solução!

Olá Thiago, tudo bem? Então, você deve continuar usando o IP 172.26.0.1 que é IP de gateway da rede do container, no caso da rede ao qual o container está vinculado. O erro:

SQLSTATE[HY000] [1130] Host 'host.docker.internal' is not allowed to connect to this MySQL server

Indica que não é permitido a conexão com o MySQL dessa forma, isso acontece porque por padrão o MySQL cria uma conta 'root'@'localhost' que só pode ser acessada de dentro do container MySQL. Para permitir conexões raiz de outros hosts, como é o caso dos outros containers, temos que atribuir uma configuração a mais no arquivo docker-compose.yml ou podemos simplesmente usar IP gateway da rede. Você pode ver mais sobre isso na própria documentação do MySQL.

Espero ter esclarecido sua dúvida!

Muito obrigado Jonilson, esclareceu sim.