Acceda a minikube desde dentro de docker/docker-compose en Linux.
La configuración:
Tengo un setup de minikube y un setup de docker-compose corriendo en paralelo. De esta manera, puedo desarrollar fácilmente mi aplicación con docker/docker-compose y ejecutar otros servicios dentro de minikube. Estoy trabajando en Linux (Ubuntu).
El problema:
Me gustaría acceder a la API de minikube dentro de un contenedor de docker corriendo dentro de docker-compose con cURL.
Lo que he intentado:
- Acceder a minikube con la configuración del proxy: curl http://localhost:8080/api (cuando se usa el kubectl proxy kubectl proxy –port=8080) pero eso, por supuesto, no funcionará porque localhost es el localhost del contenedor. Esto lleva a curl: (7) Failed to connect to localhost port 8080: Connection refused.
- Acceder a minikube a través del host interno de docker: curl http://host.docker.internal:8080/api. Esto también lleva a curl: (7) Failed to connect to host.docker.internal port 8080: Connection refused.
- Acceder a minikube a través de la api/credenciales encontradas en el script a continuación:
APISERVER=$(kubectl config view –minify | grep server | cut -f 2- -d “:” | tr -d ” “)
SECRETNAME=$(kubectl get secrets | grep ^default | cut -f1 -d ‘ ‘)
TOKEN=$(kubectl describe secret $SECRETNAME | grep -E ‘^token’ | cut -f2 -d’:’ | tr -d ” “)curl $APISERVER/api –header “Authorization: Bearer $TOKEN” –insecure
Pero todo eso falla.
También agregué esto a mi archivo docker-compose.yml:
extra_hosts:
– “host.docker.internal:host-gateway”
Todo funciona bien cuando pruebo los comandos anteriores fuera del contenedor de docker. ¿Cómo puedo acceder a minikube desde dentro de un contenedor de docker?
¡Gracias de antemano!
davy.ai
Solución:
La solución consiste en utilizar el nombre DNS
host.docker.internal
para acceder a la máquina anfitriona desde dentro del contenedor. Esto se puede lograr mediante la adición del siguiente código en el archivodocker-compose.yml
:extra_hosts:
- "host.docker.internal:<dirección IP de la máquina anfitriona>"
Donde
es la dirección IP de la máquina anfitriona.Una vez realizado esto, se puede acceder a la API de minikube desde dentro del contenedor utilizando el siguiente comando:
curl http://host.docker.internal:8080/api