{"id":120,"date":"2023-09-01T13:34:09","date_gmt":"2023-09-01T11:34:09","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/?page_id=120"},"modified":"2025-03-09T13:19:52","modified_gmt":"2025-03-09T11:19:52","slug":"2-4-eliminar-imagenes-y-contenedores-docker","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/2-4-eliminar-imagenes-y-contenedores-docker\/","title":{"rendered":"2.4. Eliminar im\u00e1genes y contenedores Docker"},"content":{"rendered":"<p>Siempre es recomendable mantener una buena gesti\u00f3n de im\u00e1genes y contenedores, ya que van ocupando espacio innecesariamente si no se utilizan. As\u00ed aprenderemos a eliminar im\u00e1genes y contenedores.<\/p>\n<p>Para poder eliminar im\u00e1genes, necesitaremos saber la Image ID. Para ello utilizaremos el siguiente comando:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker image ls<\/pre>\n<p>Nos aparecer\u00e1 un <em>output<\/em> similar al siguiente:<\/p>\n<div class=\"tabletitle\"><p>Tabla 1.<\/p>\n<\/div>\n<table width=\"642\">\n<tbody>\n<tr class=\"table-header\">\n<td width=\"128\"><strong>REPOSITORY\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><\/td>\n<td width=\"128\"><strong>TAG<\/strong><\/td>\n<td width=\"128\"><strong>IMAGE ID\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><\/td>\n<td width=\"128\"><strong>CREATED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><\/td>\n<td width=\"128\"><strong>SIZE<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"128\">alpine<\/td>\n<td width=\"128\">latest<\/td>\n<td width=\"128\">9ed4aefc74f6<\/td>\n<td width=\"128\">10 days ago<\/td>\n<td width=\"128\">7.05MB<\/td>\n<\/tr>\n<tr>\n<td width=\"128\">hello-world<\/td>\n<td width=\"128\">latest<\/td>\n<td width=\"128\">feb5d9fea6a5<\/td>\n<td width=\"128\">18 months ago<\/td>\n<td width=\"128\">13.3kB<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"tablefooter\"><p>Fuente: elaboraci\u00f3n propia.<\/p>\n<\/div>\n<p>As\u00ed para eliminar una imagen simplemente se debe especificar el Image ID tal que as\u00ed:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker image rm feb5d9fea6a5<\/pre>\n<p>O utilizando su nombre:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker image rm hello-world<\/pre>\n<p>Muchas veces nos podemos encontrar con un mensaje de error:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) \u2013 image is being used by stopped container 06dda9650983<\/pre>\n<p>Esto nos est\u00e1 indicando que hay un contenedor que a\u00fan est\u00e1 activo o que a\u00fan no ha sido limpiado que est\u00e1 o ha utilizado esta imagen. Para ello primero debemos eliminar los contenedores que est\u00e1n impidiendo la eliminaci\u00f3n de esta imagen.<\/p>\n<p>Primero listamos los contenedores activos:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker container ls<\/pre>\n<p>O, de manera similar, podemos utilizar:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker ps<\/pre>\n<p>Es posible que no nos devuelva ning\u00fan contenedor activo. En realidad, el mensaje de error previo nos indicaba que el contenedor hab\u00eda parado; por lo tanto, tiene sentido no encontrar el contenedor en este listado. As\u00ed necesitaremos ver los contenedores tanto activos como los que recientemente se han parado:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker container ls \u2013all<\/pre>\n<p>Aqu\u00ed s\u00ed que podemos ver el contenedor anteriormente especificado como enlazado a \u00abhello-world\u00bb:<\/p>\n<p><div class=\"tabletitle\"><\/div>Tabla 2.<div class=\"tabletitle\"><\/div><\/p>\n<table width=\"642\">\n<tbody>\n<tr class=\"table-header\">\n<td width=\"108\"><strong>CONTAINER ID\u00a0\u00a0 <\/strong><\/td>\n<td width=\"80\"><strong>IMAGE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><\/td>\n<td width=\"85\"><strong>COMMAND\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><\/td>\n<td width=\"122\"><strong>CREATED\u00a0 <\/strong><\/td>\n<td width=\"66\"><strong>STATUS <\/strong><\/td>\n<td width=\"58\"><strong>PORTS\u00a0 <\/strong><\/td>\n<td width=\"122\"><strong>NAMES<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"108\">8a149fe84874<\/td>\n<td width=\"80\">alpine<\/td>\n<td width=\"85\">\u00absh\u00bb<\/td>\n<td width=\"122\">About an hour ago<\/td>\n<td width=\"66\">Exited<\/td>\n<td width=\"58\"><\/td>\n<td width=\"122\">xenodochial_thompson<\/td>\n<\/tr>\n<tr>\n<td width=\"108\">06dda9650983<\/td>\n<td width=\"80\">hello-world<\/td>\n<td width=\"85\">\u00ab\/hello\u00bb<\/td>\n<td width=\"122\">12 hours ago<\/td>\n<td width=\"66\">Exited<\/td>\n<td width=\"58\"><\/td>\n<td width=\"122\">upbeat_satoshi<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"tablefooter\"><p>Fuente: elaboraci\u00f3n propia.<\/p>\n<\/div>\n<p>Para evitar que se vayan acumulando los contenedores se puede a\u00f1adir al comando <code>run<\/code> una opci\u00f3n de eliminar autom\u00e1ticamente una vez finalizado:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker container run --rm hello-world<\/pre>\n<p>Si no hemos especificado la opci\u00f3n <code>rm<\/code>, debemos eliminarlo manualmente utilizando como referencia el Container ID:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker container rm 06dda9650983<\/pre>\n<p>Si se elimina correctamente nos devolver\u00e1 el Container ID en el terminal. Se puede borrar m\u00e1s de un Container ID simult\u00e1neamente.<\/p>\n<p>Si tienes varios contenedores asociados a una imagen y quieres borrarlos todos utilizando un patr\u00f3n puedes:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker container ps -a | grep \"world\" | awk '{print $1}' | xargs docker rm<\/pre>\n<p>En este caso utilizamos el comando <code>xargs<\/code> para controlar una lista de argumentos para poder ser eliminados mediante <code>rm<\/code> de Docker.<\/p>\n<p>Ahora ver\u00e9is que al listar los contenedores ya no aparece el contenedor, y si probamos de eliminar la imagen como previamente hab\u00edamos intentado lo har\u00e1 sin problemas.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker image rm hello-world<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker image ls<\/pre>\n<p>Si se quiere eliminar todos los contenedores existentes podemos utilizar:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ docker container prune<\/pre>\n<p>De esta manera todos los contenedores existentes ser\u00e1n eliminados y si queremos volver a reconectarlos deberemos iniciarlos de nuevo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Siempre es recomendable mantener una buena gesti\u00f3n de im\u00e1genes y contenedores, ya que van ocupando espacio innecesariamente si no se utilizan. As\u00ed aprenderemos a eliminar im\u00e1genes y contenedores. Para poder eliminar im\u00e1genes, necesitaremos saber la Image ID. Para ello utilizaremos el siguiente comando: $ docker image ls Nos aparecer\u00e1 un output similar al siguiente: REPOSITORY\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/wp-json\/wp\/v2\/pages\/120"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/wp-json\/wp\/v2\/comments?post=120"}],"version-history":[{"count":10,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/wp-json\/wp\/v2\/pages\/120\/revisions"}],"predecessor-version":[{"id":466,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/wp-json\/wp\/v2\/pages\/120\/revisions\/466"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/entornos-y-contenedores\/es\/wp-json\/wp\/v2\/media?parent=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}