el comando tiene flag -it (i y t) i de interactive (para que el teclado sea input para el contenedor) y t de tty o terminal

docker exec -it

se usan en conjunto -it (terminal + innput por tecclado)

y se indica al final si uso sh o bash

  • sh: salió primero, es mas básico y liviano (muestra solo #)
  • bash: evolución de sh (muestra todo, donde estás parado y con que usuario)

un ejemplo con docker compose (archivo bash.yml):

version: '3.8'

services:
  mi_app:
    image: python:3.11-slim
    container_name: contenedor_con_bash
    working_dir: /app
    # Estas dos líneas mantienen el contenedor vivo en segundo plano
    stdin_open: true
    tty: true
    volumes:
      - .:/app
    ports:
      - "8000:8000"

lo que tiene ese docker-compose es que tiene un comando que se queda escuchando en el contenedor docker, sino se ejecuta y termina el contenedor en milisegundos

osea:

    stdin_open: true
    tty: true

levantar con docker compose, comando:

docker compose -f bash.yml up -d

comando:

 docker exec -it contenedor_con_bash bash

osea:

 docker exec -it CONTENEDOR_NOMBRE bash

eso abre una tty/shell bash en tu contenedor y la muestra en tiempo real


el comando con -it muestra /app creada con WORKDIR o working_dir