Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

384
Views
¿Cómo docker exec -ti CONTAINER_NAME/bin/bash en la pila docker implementada?

Tengo una pila acoplable implementada en AWS con enjambre:

 docker stack deploy --with-registry-auth -c docker-stack.yml pipeline

Quiero obtener una sesión de bash interactiva en uno de los contenedores definidos en docker-stack.yml , pero las diversas invocaciones de docker exec -ti CONTAINER_NAME /bin/bash que probé fallan.

¿Cuál es el método correcto para derivar un nombre de contenedor para pasarlo a:

 docker exec -it CONTAINER_NAME /bin/bash

dado que:

 docker service ps pipeline_django

devuelve información de servicio válida y:

 docker stack ps pipeline

devuelve información válida de la pila.

Ninguno de los métodos documentados para derivar container_name de estos comandos funciona cuando se pasa al comando docker exec -it . Todos fallan con:

Respuesta de error del demonio: No existe tal contenedor

He probado las cosas enumeradas aquí:

ejecutar un comando dentro del servicio docker swarm

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Las otras respuestas fallaron, porque no extraen el contenedor de la tarea. Swarm envuelve un objeto de tarea alrededor de un contenedor:

 taskid=$(docker service ps -q ${servicename} |head -1) containerid=$(docker inspect -f '{{.Status.ContainerStatus.ContainerID}}' ${taskid}) docker exec -it ${containerid} "$*"

Por supuesto, esto solo tomará el primer contenedor de la lista.

about 4 years ago · Santiago Trujillo Report

0

Aquí hay un ejemplo en mi macOS local.

 $ docker stack ls NAME SERVICES gospot_web 1 $ docker service ls ID NAME MODE REPLICAS IMAGE PORTS qigx492p2lbe gospot_web_web global 1/1 gospot/gospot-web:0.1.20.g225306b *:80->80/tcp, *:443->443/tcp

Puede usar la identificación del contenedor o el nombre del contenedor para acceder al contenedor.

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b3824a85d3c8 gospot/gospot-web:0.1.20.g225306b "nginx -g 'daemon of…" 2 hours ago Up 2 hours (healthy) 80/tcp, 443/tcp gospot_web_web.3cqcd1v22vaon517j7p5h1d9a.wrel676fcllssrm3151ymkse9 $ docker exec -it b3824a85d3c8 sh / # ls bin etc lib mnt root sbin sys usr dev home media proc run srv tmp var / # $ docker exec -it gospot_web_web.3cqcd1v22vaon517j7p5h1d9a.wrel676fcllssrm3151ymkse9 sh / # ls bin dev etc home lib media mnt proc root run sbin srv sys tmp usr var / #

Si el nombre del servicio de destino es lo suficientemente único, puede usar la siguiente línea.

 $ docker exec -it $(docker ps | grep gospot_web_web | awk '{print $1}') sh / # ls bin etc lib mnt root sbin sys usr dev home media proc run srv tmp var / #

Espero que esto ayude.

about 4 years ago · Santiago Trujillo Report

0

Puede usar el siguiente comando y reemplazar SERVICE_NAME con el nombre de su servicio:

 docker exec -it \ $(docker stack ps pipeline| grep SERVICE_NAME | cut -d' ' -f1) /bin/bash

este comando encuentra la identificación del contenedor de su servicio:

 docker stack ps pipeline| grep SERVICE_NAME | cut -d' ' -f1
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!