Shell interactivo usando Docker Compose
¿Hay alguna forma de iniciar un shell interactivo en un contenedor usando Docker Compose únicamente? Probé algo como esto, en mi docker-compose.yml:
myapp:
image: alpine:latest
entrypoint: /bin/sh
Cuando inicio este contenedor usando Docker-compose up, se cierra inmediatamente. ¿Hay indicadores que pueda agregar al entrypoint
comando, o como una opción adicional myapp
, para iniciar un shell interactivo?
Sé que existen opciones nativas de comando de Docker para lograr esto, solo tengo curiosidad por saber si también es posible usar solo Docker Compose.
Debe incluir las siguientes líneas en su docker-compose.yml
:
version: "3"
services:
app:
image: app:1.2.3
stdin_open: true # docker run -i
tty: true # docker run -t
El primero corresponde a -i
in docker run
y el segundo a -t
.
La forma canónica de obtener un shell interactivo con docker-compose es usar:
docker-compose run --rm myapp
Con el nombre del servicio myapp
tomado de su ejemplo. Más general: debe ser un nombre de servicio existente en su archivo docker-compose, myapp
no es solo un comando de su elección. Por ejemplo, bash
en lugar de myapp
no funcionaría aquí.
Puede configurar stdin_open: true, tty: true
, sin embargo, eso en realidad no le dará un shell adecuado up
, porque los registros se transmiten desde todos los contenedores.
También puedes usar:
docker exec -ti <container name> /bin/bash
para obtener un shell en un contenedor en ejecución.
El ejemplo oficial de introducción ( https://docs.docker.com/compose/gettingstarted/ ) utiliza lo siguiente docker-compose.yml
:
version: "3.9"
services:
web:
build: .
ports:
- "8000:5000"
redis:
image: "redis:alpine"
Después de comenzar esto con docker-compose up
, puede ingresar a su redis
contenedor o a su web
contenedor con:
docker-compose exec redis sh
docker-compose exec web sh
docker-compose run myapp sh
debería hacer el trato.
Existe cierta confusión con up
/ run
, pero docker-compose run
los documentos tienen una excelente explicación: https://docs.docker.com/compose/reference/run