5
respostas

Falha na conexão com o banco de dados (docker)

Estou tentando conectar minha Web API (container docker) ao SQL Server (container docker). Mas estou recebendo o erro: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server).

Eu consigo conectar ao SQL Server a partir do Management Studio instalado na minha máquina (0.0.0.0:1433->1433/tcp).

Se eu rodar a aplicação da minha máquina (apontando para o banco em: localhost), eu consigo acessar o banco. Mas se eu tentar conectar a partir da aplicação via docker (apontando para o banco em: 172.17.0.2), eu não consigo.

Ambas as imagens estão rodando na mesma rede.

O que pode estar errado?

5 respostas

Olá Daniel, tudo bem? Você está usando o Docker-compose para criar os containers? E como foi feita a configuração da rede? Você criou uma nova rede e depois adicionou os container nessa rede foi isso? Outra coisa você poderia verificar os IPs e a rede de cada container usando o comando:

docker inspect --format '{{.NetworkSettings.IPAddress}}' nome_do_container_ou_id_do_container

E fala pra gente o resultado!

Não estou usando o compose. Só baixei a imagem do SQL Server e criei uma imagem a partir do meu projeto ASP.NET Core.

No inspect eu tenho os dois containers rodando na mesma rede IP's: 172.17.0.2 (SQL Server) 172.17.0.3 (ASP.NET Core).

Certo, a faixa de IP aparentemente está correta, pórem você criou uma rede especifica para esses dois containers? Usando o comando:

docker network create [OPTIONS] NETWORK

Ou você simplesmente subiu os dois containers (docker run)? Poderia explicar essa parte da montagem do seu ambiente?

Fico aguardando retorno!

Fala Jonilson, blz?

Eu consegui resolver o problema. Não sei porque funcionou, mas funcionou.

Primeiro, respondendo a sua pergunta: eu simplesmente subi os containers. Eles estavam na mesma rede (gateway 172.17.0.1).

Como eu resolvi: criei outro container de SQL Server para testar a conexão, e apontei para ele. Quando eu vi que a chamada no SQL Server tinha funcionado, e só deu a exceção do ORM que não encontrou o banco, eu voltei a apontar pro container antigo, e tudo funcionou.

Que estranho isso! Mais que bom que funcionou! E obrigado por compartilhou a solução aqui no fórum, vai ajudar outras pessoas com certeza!