docker-compose: opción para eliminar automáticamente el contenedor después de ejecutarlo en docker-compose.yml

24

La docker-compose runreferencia indica que tiene la --rmopción de

Retire el contenedor después de correr.

Quiero que este sea un runcomportamiento predeterminado para algunos de los servicios que especifico docker-compose.yml.

Entonces, las preguntas son :

  1. ¿Se puede especificar de alguna manera docker-compose.yml?
  2. Si puede, ¿cómo puedo hacer eso?

( INB4 "Use bash aliases, Luke!" : Por supuesto, puedo aplicar esto fuera docker-compose.ymlestableciendo algunos alias de bash como, alias docker-compose-run='docker-compose run --rm'pero estoy interesado en cómo puedo aplicarlo exactamente docker-compose.yml, no de manera externa).

Ivan Kolmychek
fuente

Respuestas:

10

TLDR: todavía no es posible 2018-11 ; usar docker-compose downodocker-compose run --rm

Quiero dar una respuesta actualizada a esta pregunta porque son casi 3 años después. Esto ahorrará a otros un poco de búsqueda.

Tenía la misma pregunta y aquí están las soluciones que encontré (incluida la de la pregunta en sí):

docker-compose down

que hace lo siguiente:

Detiene contenedores y elimina contenedores, redes, volúmenes e imágenes creadas por up.

Por defecto, las únicas cosas eliminadas son:

- Containers for services defined in the Compose file
- Networks defined in the networks section of the Compose file
- The default network, if one is used

Las redes y los volúmenes definidos como externos nunca se eliminan.

Aunque no puede declararlo docker-compose.yml, le ahorrará problemas; especialmente con volúmenes y redes.

docker-compose run --rm

--rm - Retire el contenedor después de correr. Ignorado en modo separado.

Ejecuta un comando único contra un servicio. Por ejemplo, el siguiente comando inicia el servicio web y ejecuta bash como su comando.

docker-compose run web bash

[...] el comando pasado por ejecución anula el comando definido en la configuración del servicio .

[...] el comando no crea ninguno de los puertos especificados en la configuración del servicio. Esto evita colisiones de puertos con puertos ya abiertos. Si desea que los puertos del servicio se creen y asignen al host, especifique la bandera --service-ports

docker-compose rm -f

-f, --force No pidas confirmar la eliminación

Almohadilla de Moe
fuente
8

No es parte de la especificación Dockerfileo docker-compose.yml, es solo una opción cli para el comando de ejecución, por lo que la respuesta es no. Deberá confiar en algo externo para hacer cumplir.

Si tiene alguna herramienta de compilación para su proyecto, generalmente es mejor envolver las tareas de compilación acoplable con eso. Por ejemplo, nuestros proyectos Gradle proporcionan tareas relacionadas con Docker que establecen algunas opciones predeterminadas, como las --rmtareas de ejecución.

Erik Dannenberg
fuente