15
respostas

PDOException Object ( [message:protected] => SQLSTATE[HY000] [2002] No route to host

Bom dia!

Estou recebendo a mensagem de erro abaixo:

PDOException Object ( [message:protected] => SQLSTATE[HY000] [2002] No route to host [string:Exception:private] => [code:protected] => 2002 [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=172.21.0.2;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] => )

Servidor Linux Centos 8, rodando em cima de um Virtual Box.

Já ajustei o arquivo bancodedados.php e está configurado assim:

$host = "172.21.0.2";
$usuario = "root";
$senha = "q1w2e3r4";
$banco = "empresa";

Já tentei colocar o IP de Gateway citado no inspect abaixo, mas também não funcionou.

Rodei o inspect no container do MYSQL e há estas informações:

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "9328ba097eb97684fa2e48d44749e673b3fa94162da30208789316e062d5d9f9",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "3306/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3306"
                    }
                ],
                "33060/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/9328ba097eb9",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "curso-kubernetes-master_production-network": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "db",
                        "92e460db5384"
                    ],
                    "NetworkID": "a5d0b653b923b119ae48fd9a35ad23f8d5fafbd67c189c6cee6599008ae89548",
                    "EndpointID": "555af3b8fd8258a3cce22418e88e2d539cbf343c04f429ee87ff54e8a641d1a0",
                    "Gateway": "172.21.0.1",
                    "IPAddress": "172.21.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:15:00:02",
                    "DriverOpts": null
15 respostas

Olá Vagner, tudo bem? Você poderia tentar colocar o IP 172.21.0.1 no seu arquivo bancodedados.php, ficando da seguinte forma:

$host = "172.21.0.1";
$usuario = "root";
$senha = "q1w2e3r4";
$banco = "empresa";

E tentar novamente! E fala pra gente se funcionou!

Estou com o mesmo problema tentei seguir a orientação acima e o erro é o mesmo. Estou rodando o docker no CentOS 8 através de uma imagem no virtual box.

Bom dia Jonilson!

Obrigado pelo retorno. Conforme eu havia mencionado na minha reclamação, eu cheguei a fazer essa alteração para o IP do Gateway, mas a mensagem de erro é a mesma. Segue abaixo a mensagem com o erro, constatando o uso deste IP.

PDOException Object ( [message:protected] => SQLSTATE[HY000] [2002] No route to host [string:Exception:private] => [code:protected] => 2002 [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=172.21.0.1;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] => )

Como estou apanhando disso rodando via imagem do centOS8 pela virtualbox.

Tentei de todas as formas possíveis, modifiquei o docker-compose da raiz para incluir todos na mesma network na ultima tentativa, mas mesmo assim não consegui.

version: '3.3' services: noticias_web: container_name: container-kube-noticias image: jnlucas/image-phpmysql:latest networks:

  - kube-network
volumes:
  - ./noticias:/var/www/html

working_dir: /var/www/html/
ports:
  - "8588:80"
depends_on:
    - "db"

sistema_web: container_name: container-kube image: jnlucas/image-phpmysql:latest networks:

  - kube-network
volumes:
  - ./sistema:/var/www/html

working_dir: /var/www/html/
ports:
  - "8587:80"
depends_on:
    - "db"

db: image: mysql:5.7 networks:

  - kube-network
container_name: banco_mysql
volumes:
  - ./mysql:/home

ports:
  - '3306:3306'
environment:
  MYSQL_DATABASE: 'empresa'
  MYSQL_USER: 'root'
  MYSQL_PASSWORD: 'q1w2e3r4'
  MYSQL_ROOT_PASSWORD: 'q1w2e3r4'

networks: kube-network: driver: bridge

=== No host do arquivo bancodedados.php informei o nome do container, da rede, do IP da rede, do gateway, apelei muito, mas só tomei paulada.

=== O site insiste em me devolver o mesmo erro. PDOException Object ( [message:protected] => SQLSTATE[HY000] [2002] No route to host [string:Exception:private] => [code:protected] => 2002 [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=bancomysql;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] => )

Bom pessoal, como vocês criaram o ambiente de vocês? Porque o procedimento é o seguinte:

1) Primeiro excluam todos os containers criados, com o comando: docker-compose down;

2) Agora é necessário fazer as seguintes modificações:

2.1) Alterar o arquivo docker-compose.yml da pasta mysql, e remover a variável MYSQL_USER, o arquivo completo deve ficar da seguinte forma:

version: '3.7'
services:
  db:
    image: mysql:5.7
    container_name: banco_mysql
    volumes:
      - ./:/home

    ports:
      - '3306:3306'
    environment:
      MYSQL_DATABASE: 'empresa'
      MYSQL_PASSWORD: 'q1w2e3r4'
      MYSQL_ROOT_PASSWORD: 'q1w2e3r4'

2.1) colocar o IP 172.21.0.1 ** no arquivo **bancodedados.php, ele deve ficar assim:

<?php
$host = "172.17.0.1";
$usuario = "root";
$senha = "q1w2e3r4";
$banco = "empresa";

?>

3) Agora vocês precisam navegar até a pasta mysql pelo terminal e executar o passo a passo:

  • Subir o container do mysql com o comando: docker-compose up -d;
  • Depois entrar dentro do container com o comando: docker exec -it banco_mysql bash;
  • E entrar na pasta home do container com o comando: cd /home;
  • Agora vocês devem executar os comandos abaixo para importar as tabelas (um por vez):
mysql -u root -p empresa < empresa_usuario.sql

mysql -u root -p empresa < empresa_noticias.sql
  • Agora para sair do mysql basta executar o comando exit e para sair do container executem também o comando exit.

4) Agora que o MySQL já está pronto, vocês devem retornar a pasta raiz, basta usar o comando cd ..;

5) Agora vocês devem subir os containers das notícias e do sistema de notícias, para isso executem o seguinte comando:

docker-compose up -d

6) Agora já devemos acessar tudo normalmente pelos endereços:

Façam esse processo e falam se funcionou!

Oi Jonilson,

Antes já tinha feito exatamente isso e não funcionou, para ter garantia que não estava errando em algo eu segui exatamente o passo a passo (copiando os comandos), mas mesmo assim apresentou o mesmo erro.

PDOException Object ( [message:protected] => SQLSTATE[HY000] [2002] No route to host [string:Exception:private] => [code:protected] => 2002 [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=172.17.0.1;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] => )

oi Jonilson,

Cara, para não atrasar meu plano de estudos eu vou apelar e instalar o Docker for windows. Eu segui na virtualização do Centos para simular um ambiente mais real de trabalho, no meu trabalho tudo executa no unix/linux e acessamos os servidores via terminal (moba, putty).

Gostaria muito da sua ajuda para saber como tratar isso num ambiente real, como postado anteriormente eu fiz diversas tentativas e todas falharam. :(

Sem problemas Francisco, você pode dar continuidade com outros cursos enquanto tentamos resolver esse problema.

Sobre o que eu indiquei, bem tive o mesmo erro aqui na minha máquina e seguindo esse processo deu certo. Mais vamos ter outra alternativa:

Você poderia repetir todos os passos que indiquei no último post e agora informar o IP do seu computador na rede local no arquivo bancodedados.php:

$host = "192.168.1.8";

Atenção: Remova todos os containers criados anteriormente usando o comando docker-compose down dentro da pasta raiz do projeto e também na pasta "mysql".

E fala pra gente o resultado!

oi Jonilson,

Mesmo erro cara, eu estou usando o modelo de rede bridge na virtualbox para minha imagem centos8, enfim, estava conseguindo fazer tudo até este erro.

Tem alguma outra dica? Sinceramente acho que já tentei de tudo cara ...

Nossa bastante estranho isso, porém Francisco estou meio perdido em como está seu ambiente atualmente. Você está usando qual sistema operacional na sua máquina física? E no caso o CentOS8 está sendo executado no VirtualBox, correto? Porém o CentOS8 está executando com interface gráfica e você fazendo tudo dentro dessa máquina virtual é isso? Poderia tentar adicionar um IP da rede local para essa máquina virtual CentOS8 e tentar o usando esse IP.

Pode falar mais sobre como está o seu ambiente, se puder enviar alguns prints (só colocar no imgur e coloca os links aqui) para eu entender melhor seu ambiente e tentar outras soluções!

Fico aguardando retorno!

oi Jonilson,

Máquina Física Windows 10 Home Single Language

Máquina Virtual CentOS Linux 8 (Core) com interface gráfica a princípio estava usando o modo de rede bridge, mas por achar que estava atrapalhando estou usando como NAT (mas o erro ocorre da mesma forma)

[root@centos8 curso-kubernetes-master]# cat /etc/*-release
CentOS Linux release 8.0.1905 (Core) 
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"

Configuração IP (Máquina Virtual)

[root@centos8 curso-kubernetes-master]# ifconfig
br-48a3b4ecd726: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:a8:db:06:7c  txqueuelen 0  (Ethernet)
br-a5518dfe9763: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.30.0.1  netmask 255.255.0.0  broadcast 172.30.255.255
        inet6 fe80::42:b0ff:fe47:9c69  prefixlen 64  scopeid 0x20<link>
        ether 02:42:b0:47:9c:69  txqueuelen 0  (Ethernet)
br-f6ce0d0519e1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.29.0.1  netmask 255.255.0.0  broadcast 172.29.255.255
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
veth31de298: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::8808:bff:fea9:ff20  prefixlen 64  scopeid 0x20<link>
veth5abd28d: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::7091:f3ff:fe40:16db  prefixlen 64  scopeid 0x20<link>
vethfa6e3c5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::bc40:c3ff:fe11:7150  prefixlen 64  scopeid 0x20<link>
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

Configuração IP (Máquina Física) Windows10

C:\Users\fmarcelosilva>ipconfig
Configuração de IP do Windows
Adaptador Ethernet VirtualBox Host-Only Network:
   Sufixo DNS específico de conexão. . . . . . :
   Endereço IPv6 de link local . . . . . . . . : fe80::2843:78e1:52ea:ed97%2
   Endereço IPv4. . . . . . . .  . . . . . . . : 192.168.56.1
   Máscara de Sub-rede . . . . . . . . . . . . : 255.255.255.0
   Gateway Padrão. . . . . . . . . . . . . . . :
Adaptador de Rede sem Fio Conexão Local* 1:
   Estado da mídia. . . . . . . . . . . . . .  : mídia desconectada
   Sufixo DNS específico de conexão. . . . . . :
Adaptador de Rede sem Fio Conexão Local* 10:
   Estado da mídia. . . . . . . . . . . . . .  : mídia desconectada
   Sufixo DNS específico de conexão. . . . . . :
Adaptador de Rede sem Fio Wi-Fi:
   Sufixo DNS específico de conexão. . . . . . :
   Endereço IPv6 . . . . . . . . . . : 2804:14c:118:2127::1000
   Endereço IPv6 . . . . . . . . . . : 2804:14c:118:2127:e11c:a9be:1dd6:82cd
   Endereço IPv6 Temporário. . . . . . . . : 2804:14c:118:2127:65e2:2b06:db55:e23c
   Endereço IPv6 de link local . . . . . . . . : fe80::e11c:a9be:1dd6:82cd%4
   Endereço IPv4. . . . . . . .  . . . . . . . : 192.168.0.30
   Máscara de Sub-rede . . . . . . . . . . . . : 255.255.255.0
   Gateway Padrão. . . . . . . . . . . . . . . : fe80::ea20:e2ff:fece:4940%4
                                                 192.168.0.1

Oi Jonilson,

Eu fiz a instalação no Windows 10 e está tudo em ordem agora man, vou deixar a imagem que tenho do CentOS para outros treinamentos.

Peço uma dica com outra coisa eu tenho um SSD onde rodo o windows e um HD adicional. Eu consigo configurar o docker para armazenar as imagens em um local do HD e não no SSD onde tem o sistema operacional instalado? Nas configurações triviais do docker não encontrei nenhuma opção relacionado a storage.

Abraço,

Francisco, sobre o erro não consigo reproduzir aqui, então acho que seria muito válido você tentar executar no seu próprio Windows 10, porém acho que precisa ser o Windows Pro para executar nativamente o Docker.

Sobre o armazenamento, nesse link tem um tutorial de como mudar o local de armazenamento do Docker, só que para o ambiente Linux, no Windows eu particularmente ainda não tentei.

Oi Jonilson,

Eu consegui fazer a instalação no windows home seguindo o procedimento da documentação do docker e fois de boas. Inclusive na primeira tentativa o site já funcionou normalmente. A quantidade de recurso computacional é muito maior que no linux, chega a exigir 4x mais memória, mas vou seguir assim ...

Sobre o link com as opções de storage você não mandou, consegue enviar? De qualquer forma vou procurar, a principio não tinha achado nada para o windows, mas vou pesquisar mais.

Obrigado

Que legal que deu certo Francisco! E peça desculpas pelo meu erro, pensei ter colocar o link, bem o link é esse aqui:

https://docs.docker.com/storage/storagedriver/overlayfs-driver/

Espero ter ajudado!