docker - hub - ¿Cómo puedo extraer contenedores separados y hacer que se eliminen automáticamente cuando salen?
dockers container download (2)
¿Por qué los argumentos conflictivos -d
y --rm
en Docker?
$ docker run -d --rm image
Conflicting options: --rm and -d
Tengo varios contenedores que ejecutan pruebas unitarias / funcionales / de integración. Los contenedores Docker se inician, ejecutan las pruebas y luego se detienen. Los ejecuto separados ya que solo me importan los resultados, pero también me gustaría que los contenedores se eliminen después de que el contenedor salga. ¿Cuál sería una buena manera de hacer esto?
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 es compatible cuando -d no se proporciona. No tiene sentido eliminar automáticamente un contenedor creado mediante Docker run -d. Hay dos razones por las cuales 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) haciendo que esta ejecución en el lado del servidor sea difícil en la arquitectura actual.
La buena noticia es que alguien ya abrió un problema para solucionarlo , por lo que puede seguir la discusión allí.
Además, una solución no es muy 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
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 la ejecución de contenedores separados con la opción de eliminación: https://github.com/docker/docker/pull/20848