¿Cómo puedo ejecutar contenedores separados y eliminarlos automáticamente cuando salen?


¿Por qué hay -d y --rm argumentos en conflicto en Docker?

$ docker run -d --rm image
Conflicting options: --rm and -d

Tengo una serie de contenedores que ejecutan pruebas unitarias/funcionales/de integración. Los contenedores de Docker se inician, ejecutan las pruebas y, a continuación, se detienen. Los ejecuté separados ya que solo me importan los resultados, pero también me gustaría que los contenedores se eliminaran después de que el contenedor salga. Cuál sería una buena manera de hacer esto?

 36
Author: Nathan, 2014-07-15

2 answers

Actualmente (Docker v1.1.1), esta funcionalidad no es compatible. El desarrollador de la característica --rm explica las razones de eso en su PR #1589:

Actualmente solo se admite cuando no se proporciona-d. No tiene sentido eliminar automáticamente un contenedor creado a través de docker run-d. Hay dos razones por las que esto se implementa de esta manera: 1) es posible que deseemos recuperar algún tipo de estado de salida o registros antes de eliminar el contenedor 2) hacer esta ejecución en el el lado del servidor es difícil en la arquitectura actual.

La buena noticia es que alguien ya abrió un problema para arreglar esto, por lo que puede seguir la discusión allí.

Además, una solución no es demasiado complicada, puede ejecutar sus contenedores utilizando un script de envoltura de la siguiente manera:

ID=$(docker run -d ubuntu sleep 3)
docker wait $ID
docker rm $ID
 28
Author: Leonid Mirsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-16 23:05:29

Estas opciones ya no entran en conflicto a partir de la versión 1.13.0 de Docker

Hubo una solicitud de extracción que mueve la opción --rm daemon-side y permite ejecutar contenedores separados con la opción de eliminación: https://github.com/docker/docker/pull/20848

 13
Author: jchysk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-16 23:10:24