yml script que programacion pasar parametros guia espaƱol ejemplos correr configurar compose como comandos shell docker interactive docker-compose

shell - script - que es docker compose



Shell interactivo con Docker Compose (7)

¿Hay alguna manera de iniciar un shell interactivo en un contenedor usando Docker Compose únicamente? He intentado algo como esto, en mi docker-compose.yml:

myapp: image: alpine:latest entrypoint: /bin/sh

Cuando comienzo este contenedor usando docker-compose, sale inmediatamente. ¿Hay alguna bandera que pueda agregar al comando de punto de entrada, o como una opción adicional para myapp, para iniciar como shell interactivo?

Sé que hay opciones de comando de Docker nativas para lograr esto, solo tengo curiosidad por saber si es posible usar solo Docker Compose también.


Debe incluir las siguientes líneas en su docker-compose.yml:

stdin_open: true tty: true

El primero corresponde a -i en docker run y el segundo a -t .


En el ejemplo oficial de inicio ( https://docs.docker.com/compose/gettingstarted/ ) con el siguiente docker-compose.yml :

version: ''3'' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"

Después de comenzar esto con docker-compose up , puede fácilmente redis su contenedor redis o su contenedor web con:

docker-compose exec redis sh docker-compose exec web sh


La forma canónica de obtener un shell interactivo con docker-compose es usar: docker-compose run --rm myapp

Puede establecer stdin_open: true, tty: true , sin embargo, eso en realidad no le dará un shell adecuado con 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.


Puede hacer docker-compose exec SERVICE_NAME sh en la línea de comando. SERVICE_NAME se define en su docker-compose.yml . Por ejemplo,

services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181"

SERVICE_NAME sería "zookeeper".


Si alguien del futuro también se pregunta aquí:

docker-compose exec container_name sh

o

docker-compose exec container_name bash

o puedes correr líneas simples como

docker-compose exec container_name php -v

Eso es después de que ya tienes tus contenedores en funcionamiento


Usando docker-compose, encontré que la forma más fácil de hacer esto es hacer un docker ps -a (después de comenzar mis contenedores con docker-compose up ) y obtener la ID del contenedor en el que quiero tener un shell interactivo (llamemos es xyz123).

Entonces es simple ejecutar docker exec -ti xyz123 /bin/bash

y voila, un caparazón interactivo.