Docker solucionar el nombre duplicado de red
 
  Marzo 25, 2020

El Problema

Un día tuve que reiniciar mi servidor linux y como Murphy no falla al regresar la instancia de docker estaba vacía sin ningún container, después de explorar un rato y revisar que todo estuviera en orden no encontré la causa, hice lo que se debe hacer … reinicie nuevamente el servidor y ohh sorpresa ahi estaban de nuevo todos mis containers ¡Genial! pero … al momento de intentar iniciarlos


ERROR: network xxxx is ambiguous (2 matches found based on name)

Los porques

Encontré que es valido duplicar el nombre de la red en docker, mi sospecha es que al no encontrar la configuración docker generó nuevamente toda las redes porque como pueden ver se duplicaron las redes y los drivers

 docker network list

            

$ docker network ls
NETWORK ID NAME DRIVER SCOPE
27b6c27fdc2b bridge bridge local
33f2a0c04878 bridge bridge local
c4247d693521 host host local
9b95be563bf7 host host local
590102262bb5 none null local
25e1bf9dc86 none null local
            
            
        

Asi que la solucion parece simple eliminar la red duplicada y ya esta docker network rm [ID], lo intente pero ….


Error : bridge is a pre-defined network and cannot be removed

La solución no parece ser tan trivial, en algún foro encontré que para poder eliminar la red:

  1. El servicio de docker debe estar detenido
  2. No debe existir un contenedor usando la red
  3. No tener ningún contenedor creado

Por cierto para ver cuales containers están usando la red puedes usar:

 Inspect network ID of a container

            

# Como bridge esta repetido necesitas hacerlo por Id y revisar la sección de "Containers"
docker network inspect [id || name]

"Internal": false,
{ "Network": "" },
"ConfigOnly": false,
"Containers": {},

            
            
        

La opción uno y dos no funcionaron y no podía darme el lujo de eliminar los containers y volverlos a crear pues ya los tenia configurados con sus volúmenes y otras cosas asi que la solución es:

Solución

  1. Crear una nueva red con -d especificamos el driver

docker network create -d bridge [nuevo-nombre-de-red]

  1. Desconectar el o los containers de la red ambigua

    docker network disconnect bridge [contenedor]

  2. Conectar el o los containers hacia la nueva red

    docker network connect [nuevo-nombre-de-red] [contenedor]

  3. Opcional. Purgar nuestra red para eliminar aquellas redes que no estamos utilizando.

docker network rm $(docker network ls -q)

Listo ya con esto podemos iniciar nuestro container


docker start my-happy-container