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

El docker-compose run referencia declara que tiene la --rm opción de

Retire el recipiente después de la ejecución.

Quiero hacer de esto un valor predeterminado run comportamiento para algunos de los servicios que especifico en docker-compose.yml.

Entonces, las preguntas son:

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

(INB4 " Usa alias de bash, Luke!": Por supuesto que puedo hacer cumplir esto fuera de docker-compose.yml al establecer un alias de bash como alias docker-compose-run='docker-compose run --rm' pero estoy interesado en cómo puedo hacer cumplir eso exactamente a través de docker-compose.yml, no de alguna manera externa.)

TLDR: Es todavía no es posible 2018-11; utilizar docker-compose down o docker-compose run --rm

Quiero dar una respuesta actualizada a esta pregunta porque casi 3 años más tarde. Esto les ahorrará a otros algunas búsquedas.

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 creados por up.

De forma predeterminada, las únicas cosas que se eliminan 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 se puede declarar en docker-compose.yml le ahorrará algunos problemas; especialmente con volúmenes y redes.

docker-compose run --rm

-- rm-Retire el recipiente después de la ejecución. Ignorado en modo separado.

Ejecuta un comando de una sola vez en 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 run anula el comando definido en el servicio configuración.

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

docker-compose rm -f

- f, force forzar No preguntar para confirmar la eliminación

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

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