es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe un equivalente de docker daemon para kubectl port-forward?

Digamos que tienes un archivo de docker-compose largo con muchos contenedores que se comunican entre sí dentro de una red de Docker. Llamemos a esto un “stack”. Si deseas lanzar este stack 3 veces, cada una con una configuración ligeramente diferente, puedes hacer lo siguiente:

docker-compose -p pizza up
docker-compose -p pie up
docker-compose -p soda up

Pero esto fallaría si tienes algún puerto expuesto al host:

nginx:
image: nginx:alpine
ports:
– “80:80”
networks:
– my_app_net

Fallaría porque el host solo puede exponer una cosa en el puerto 80.

Una alternativa es definir esa declaración de puerto en diferentes archivos y usar puertos diferentes:

$ cat pizza.yml
services:
nginx:
ports:
– “8001:80”
$ cat pie.yml
services:
nginx:
ports:
– “8002:80”
$ cat soda.yml
services:
nginx:
ports:
– “8003:80”
docker-compose -f docker-compose.yml -f pizza.yml -p pizza up
docker-compose -f docker-compose.yml -f pie.yml -p pie up
docker-compose -f docker-compose.yml -f soda.yml -p soda up

Esto funciona porque cada stack publica el puerto 80 en un puerto diferente. Eso está bien, pero es un poco molesto porque tenemos que detener/iniciar el stack para hacer esto.

¿Cómo podemos hacer esto sin publicar el puerto o detener/iniciar el stack?

Si esto fuera un clúster de Kubernetes, podríamos usar kubectl para hacer esto con un “port-forward” de la siguiente manera:

kubectl port-forward replicaset/nginx-75f59d57f4 8001:80

Esa forma se ajusta un poco mejor a mi situación porque no queremos detener el stack para ver qué está sucediendo en él. Podemos iniciar el “port-forward”, ver qué está pasando y luego irnos.

¿Existe un equivalente para Docker?

Preguntas relacionadas:
– https://stackoverflow.com/questions/65537166/is-there-a-kubectl-port-forward-equivalent-in-podman

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no hay un equivalente directo para Docker que permita lograr esto sin publicar el puerto o detener/iniciar el conjunto (stack). La función de reenvío de puertos es específica de Kubernetes y no está disponible en Docker. Sin embargo, existen algunas soluciones alternativas que se pueden utilizar para evitar publicar el puerto o detener/iniciar el conjunto, como el uso de servidores proxy inversos o balanceadores de carga para redirigir el tráfico hacia el conjunto. Otra opción es utilizar túneles SSH para redirigir el tráfico hacia el contenedor deseado dentro del conjunto. Estas soluciones pueden requerir una configuración y preparación adicional, pero pueden proporcionar una forma de acceder a los contenedores sin cambiar las asignaciones de puerto o reiniciar el conjunto.

Comments are closed.