Solución:
Incluso si configura MySQL para escuchar en todas las interfaces, y luego desde su contenedor accede a MySQL desde una IP sin loopback, puede encontrar que las reglas de enrutamiento, NAT y firewall de Docker no le permiten acceder a los servicios que se ejecutan en el host. La solución rápida para esto es ejecutar su contenedor en la pila de la red del host con:
docker run -tid -v $(pwd):/code -p 3306:3306 -p 5000:5000
--name container --net host container
También puede mover MySQL dentro de un contenedor que se ejecuta en la misma red de Docker y luego acceder a él a través del nombre del contenedor utilizando el servicio de detección de DNS de Docker.
Utilice la ruta predeterminada. Por ejemplo:
~# ip route show | grep "default" | awk '{print $3}'
172.18.0.1
luego
mysql -h 172.18.0.1 -P 3306 -u root -p
si necesita automatizar eso, digamos, use esa IP en un script de shell, envíelo a un script de shell, tómelo como:
host=$(ip route show | grep "default" | awk '{print $3}' | xargs echo -n)
entonces tienes la dirección IP del host en $host