{"id":5425,"date":"2023-10-22T16:00:00","date_gmt":"2023-10-22T15:00:00","guid":{"rendered":"https:\/\/bitacora.eniac2000.com\/?p=5425"},"modified":"2023-10-22T16:00:00","modified_gmt":"2023-10-22T15:00:00","slug":"como-editar-los-puertos-a-un-contenedor-docker-en-ejecucion","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=5425","title":{"rendered":"C\u00f3mo editar los puertos a un contenedor docker en ejecuci\u00f3n"},"content":{"rendered":"<p>Una de las gracias de ejecutar servicios en un contenedor docker es que, si cambian las necesidades del contenedor (como por ejemplo publicar en un nuevo puerto), es bastante sencillo aprovisionar uno nuevo sin mayores consecuencias. Pero a veces pasa que no puedes destruir y aprovisionar un nuevo contenedor, bien porque tienes determinada informaci\u00f3n persistente en el mismo (cosa que no debe hacerse, ya que en teor\u00eda los contenedores han de poder ser sin estado, pero esa es otra historia) o por cualquier otro motivo, y precisas de mantener el mismo contenedor, pero modificando (bien a\u00f1adiendo, quitando o reemplazando puertos) el contenedor existente. Aunque no es una buena pr\u00e1ctica, es posible realizarlo, siguiendo los siguientes pasos (por supuesto, recomiendo hacer primero una copia de seguridad de los ficheros modificados):<\/p>\n<ul>\n<li><strong>Detener el contenedor en cuestion:<\/strong> Haremos un <em>docker ps<\/em> para obtener el listado de contenedores, y poder identificar nuestro contenedor en cuesti\u00f3n. Tras ello, lo detendremos con un <em>docker stop <contaider -id><\/contaider><\/em>.<\/li>\n<li><strong>Abrir el directorio que contiene el docker:<\/strong> Lo m\u00e1s normal es que haya que realizarlo con permisos de root. Se encontrar\u00e1 bajo la ruta <em>\/var\/lib\/docker\/containers\/<\/em>, y all\u00ed tendremos que entrar en una carpeta que comience por el id del contenedor.<\/li>\n<li><strong>Editar el fichero hostconfig.json para modificar las asociaciones de puertos entre host y contenedor:<\/strong> Una vez en la carpeta, tendremos que editar el fichero <em>hostconfig.json<\/em>. Esto nos permitir\u00e1 reconfigurar las asociaciones de puertos entre el host y el contenedor docker. Para a\u00f1adir un nuevo puerto, tendremos que a\u00f1adir una entrada en la secci\u00f3n PortBindings. Por ejemplo, si quisi\u00e9ramos a\u00f1adir el puerto 18334\/tcp a un docker que publique por el puerto 18332, tendr\u00edamos que dejar esa secci\u00f3n de la siguiente manera:<br \/>\n<blockquote><p>\u00abPortBindings\u00bb:{\u00ab18332\/tcp\u00bb:[{\u00abHostIp\u00bb:\u00bb\u00bb,\u00bbHostPort\u00bb:\u00bb18332&#8243;}],\u00bb18334\/tcp\u00bb:[{\u00abHostIp\u00bb:\u00bb\u00bb,\u00bbHostPort\u00bb:\u00bb18334&#8243;}]}<\/p><\/blockquote>\n<\/li>\n<li><strong>Editar el fichero config.v2.json para modificar las exposiciones de puertos del contenedor:<\/strong> Asociar el puerto por s\u00ed solo no es suficiente, es preciso decirle al contenedor que tiene que exponer un nuevo puerto, que habr\u00e1 de coincidir con el a\u00f1adido en el punto anterior. Para ello, hay que modificar el fichero <em>config.v2.json<\/em>, bajo la secci\u00f3n <em>ExposedPorts<\/em>. Como en el caso anterior, si quisi\u00e9ramos publicar ese puerto 18334\/tcp, tendr\u00eda que quedar como sigue:<br \/>\n<blockquote><p>\u00abExposedPorts\u00bb:{\u00ab18332\/tcp\u00bb:{},\u00bb18334\/tcp\u00bb:{}},<\/p><\/blockquote>\n<\/li>\n<li><strong>Reiniciar el servicio docker:<\/strong> Bastar\u00e1 con un <em>sudo systemctl restart docker<\/em>.<\/li>\n<li><strong>Iniciar el contenedor:<\/strong> En caso de que el contenedor no se haya iniciado de manera autom\u00e1tica al reiniciar el servicio docker, tendremos que iniciarlo a mano con un <em>docker start <container -id><\/container><\/em>. Posteriormente, con un <em>docker ps<\/em> podremos verificar que hemos modificado adecuadamente los puertos expuestos.<\/li>\n<\/ul>\n<p><strong>Referencias:<br \/>\n<\/strong><\/p>\n<ul>\n<li><a href=\"https:\/\/www.baeldung.com\/linux\/assign-port-docker-container\" target=\"_blank\">Assigning a Port Mapping to a Running Docker Container<\/a><\/li>\n<li><a href=\"https:\/\/dev.to\/codaelux\/how-to-open-edit-bind-ports-to-running-docker-containers-1a34\" target=\"_blank\">How to open\/edit\/bind ports to running Docker Containers<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Una de las gracias de ejecutar servicios en un contenedor<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[447,540,1074,1350],"series":[],"class_list":["post-5425","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-contenedor","tag-docker","tag-microservicios","tag-puertos"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/5425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5425"}],"version-history":[{"count":0,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/5425\/revisions"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5425"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=5425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}