ignaciolp-logo

Ignacio LP.



Como solucionar errores pocos conocidos en docker, con soluciones algunas muy simples.



Introducción

Comparto algunos problemas que he tenido con docker, problemas que se repiten quizás una vez cada 5 meses y la solución es muy simple, pero no es tan fácil de encontrar en foros.



Docker compose no resuelve dns, nombre de contenedor.

Hace poco necesitaba testear un servicio en mi entorno local, lo de siempre, un backend que se conecta a una db y otros servicios externos, en ese caso estaba usando un asp.net api junto a un mssql, ambos ejecutandose en container separados.


#backend yml
services:
  backend:
    image: backend-local
    container_name: backend
    environment:
      - DATABASE_URL=Server=autogenerated_name;Database=TestingDb;User Id=SA; Password=${DB_PASS};TrustServerCertificate=True;
    networks:
      - sql

networks:
  sql:
    external: true

El container sql es un contendor que levante en mi máquina por defecto según la documentación de mssql, despues de todo es solo para testear en mi máquina local, como notaran el nombre del contenedor usado para el database url fue el nombre generado automáticamente por docker cuando no se le define ningún nombre.


docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Lo único que hice entonces fue un docker compose up y no me conectaba a la instancia, me saltaba el error "no se pudo conectar a sql server, timeout, etc.", a primera vista no se encuentra el error, incluso esto ya lo he aplicado en producción y jamás me saltó este error, pero en mi máquina local sí. ¿Pueden localizar el error?

Luego de 3 horas levantando, bajando, cambiando de puerto, verificando que la url la está recibiendo el backend, verificando que la instancia mssql estubiese en la misma network junto con el backend, y nada. En una de esas probé a asignarle la ipv4 del contenedor y sí funcionó, entonces el problema no era la network, solo es que docker no resolvía el dns.


Solución

Al final lo único que hice fue renombrar la instancia mssql, el nombre por defecto se lo quité y le puse un nombre que yo quise, modifiqué entonces el backend yml con el nuevo nombre del contenedor y listo, funcionó.


docker container rename CONTAINER NEW_NAME