{"id":3051,"date":"2020-02-21T11:22:42","date_gmt":"2020-02-21T10:22:42","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=3051"},"modified":"2020-02-21T11:22:42","modified_gmt":"2020-02-21T10:22:42","slug":"docker-como-solucion-ultima-y-un-poco-desesperada","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2020\/02\/21\/docker-como-solucion-ultima-y-un-poco-desesperada\/","title":{"rendered":"Docker como soluci\u00f3n \u00faltima y un poco desesperada"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:357,&quot;href&quot;:&quot;https:\\\/\\\/guacamole.apache.org&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260330055739\\\/https:\\\/\\\/guacamole.apache.org\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 12:06:57&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-18 14:47:38&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-18 14:47:38&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:358,&quot;href&quot;:&quot;https:\\\/\\\/es.wikipedia.org\\\/wiki\\\/Programaci%C3%B3n_orientada_a_objetos&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:359,&quot;href&quot;:&quot;https:\\\/\\\/docs.docker.com\\\/compose&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415121344\\\/https:\\\/\\\/docs.docker.com\\\/compose&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-18 04:55:40&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-18 04:55:40&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:360,&quot;href&quot;:&quot;https:\\\/\\\/hub.docker.com\\\/r\\\/guacamole\\\/guacd&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260222014901\\\/https:\\\/\\\/hub.docker.com\\\/r\\\/guacamole\\\/guacd&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 12:07:19&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 12:07:19&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:361,&quot;href&quot;:&quot;https:\\\/\\\/hub.docker.com\\\/r\\\/guacamole\\\/guacamole&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415121404\\\/https:\\\/\\\/hub.docker.com\\\/r\\\/guacamole\\\/guacamole&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-18 04:55:32&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-18 04:55:32&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:362,&quot;href&quot;:&quot;https:\\\/\\\/guacamole.apache.org\\\/doc\\\/gug\\\/guacamole-docker.html&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260320164847\\\/https:\\\/\\\/guacamole.apache.org\\\/doc\\\/gug\\\/guacamole-docker.html&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 12:07:35&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 12:07:35&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:363,&quot;href&quot;:&quot;https:\\\/\\\/guacamole.apache.org\\\/doc\\\/gug\\\/proxying-guacamole.html&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20211231031132\\\/https:\\\/\\\/guacamole.apache.org\\\/doc\\\/gug\\\/proxying-guacamole.html&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 12:07:40&quot;,&quot;http_code&quot;:404}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 12:07:40&quot;,&quot;http_code&quot;:404},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:364,&quot;href&quot;:&quot;https:\\\/\\\/docs.docker.com\\\/engine\\\/reference\\\/commandline\\\/cli&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/docs.docker.com\\\/reference\\\/cli\\\/docker\\\/&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:365,&quot;href&quot;:&quot;https:\\\/\\\/stackoverflow.com\\\/questions\\\/23439126\\\/how-to-mount-a-host-directory-in-a-docker-container&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415121414\\\/https:\\\/\\\/stackoverflow.com\\\/questions\\\/23439126\\\/how-to-mount-a-host-directory-in-a-docker-container&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-18 04:55:42&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-18 04:55:42&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:366,&quot;href&quot;:&quot;https:\\\/\\\/docs.docker.com\\\/storage\\\/bind-mounts&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20250928165422\\\/https:\\\/\\\/docs.docker.com\\\/storage\\\/bind-mounts\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 12:08:00&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 12:08:00&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:367,&quot;href&quot;:&quot;https:\\\/\\\/picodotdev.github.io\\\/blog-bitix\\\/2015\\\/07\\\/aplicaciones-multicontenedor-con-docker-compose&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20250618113807\\\/https:\\\/\\\/picodotdev.github.io\\\/blog-bitix\\\/2015\\\/07\\\/aplicaciones-multicontenedor-con-docker-compose\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 12:08:03&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 12:08:03&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:368,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/BrowncoatShadow\\\/compose-guacamole\\\/blob\\\/master\\\/docker-compose.yml&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:369,&quot;href&quot;:&quot;https:\\\/\\\/docs.docker.com\\\/compose\\\/compose-file&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20240814230703\\\/https:\\\/\\\/docs.docker.com\\\/compose\\\/compose-file\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 12:08:18&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 12:08:18&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p>Para el problema de turno, que no es otro que arreglar  un sistema donde algunas aplicaciones -tras actualizar el sistema- dejan de funcionar como en este caso me ha ocurrido con <a href=\"https:\/\/guacamole.apache.org\/\">Guacamole<\/a>. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>No lo he tenido en cuenta antes porque no me hab\u00eda hecho falta. Generalmente empleo Guacamole para acceder a las diferentes m\u00e1quinas en la red empleando un navegador web. El sistema ha funcionando bastante bien hasta que actualic\u00e9 Debian a la versi\u00f3n 10. Desde ese momento uno de los componentes -guacamole- dej\u00f3 de arrancar y, por tanto,, de enlazar el navegador web y el componente de conexi\u00f3n con las m\u00e1quinas llamado guacd. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/09\/guac-arch.png\" alt=\"\" class=\"wp-image-2381\" width=\"276\" height=\"435\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/09\/guac-arch.png 320w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2017\/09\/guac-arch-190x300.png 190w\" sizes=\"auto, (max-width: 276px) 100vw, 276px\" \/><\/figure><\/div>\n\n\n\n<p>El sistema lo hab\u00eda instalado empleando los paquetes Debian habituales as\u00ed que me dirig\u00ed al registro de errores para ver si era algo que pod\u00eda resolver con sencillez. Y no, m\u00e1s bien al contrario. La versi\u00f3n de Debian era anticuada, no se hab\u00eda actualizado correctamente porque no ten\u00eda soporte para FreeRDP2 y si te tocaba el error pues no hab\u00eda un m\u00e9todo f\u00e1cil de ponerlo en marcha. Construirlo desde los fuentes era una opci\u00f3n pero me encontr\u00e9 con tantas dificultades que hoy se me ocurri\u00f3 recurrir a los contenedor Linux mediante Docker. Si los hab\u00edan construido correctamente deber\u00edan funcionar igualmente; s\u00f3lo ten\u00eda que ceder, instalar docker y aprender un m\u00ednimo sobre \u00e9l. <\/p>\n\n\n\n<p>As\u00ed que me he puesto manos a la obra y he visto que existen im\u00e1genes para el programa, una para el programa <em>guacamole<\/em> y otra para <em>guacd <\/em>. Tras instalar el programa <em>docker <\/em>como paquete Debian descargar estas im\u00e1genes y lanzar los contenedores ha sido trivial. Y mira, funcionan muy bien. O eso creo porque aparte de estar ocupando CPU, memoria y puertos de red no estoy seguro de nada m\u00e1s. <\/p>\n\n\n\n<p>Si, los contenedores son instancias de las im\u00e1genes, un s\u00edmil de clase y objeto en el paradigma <a href=\"https:\/\/es.wikipedia.org\/wiki\/Programaci%C3%B3n_orientada_a_objetos\">POO,<\/a> y sin tocar las im\u00e1genes se pueden crear montones de contenedores cambiando los par\u00e1metros para que no colisionen  entre ellos. Hasta aqu\u00ed lo entiendo. Veo adem\u00e1s que cada contenedor tiene su propio \u00e1rbol de directorios y archivos como es l\u00f3gico, y que desaparecen cada vez que se elimina el contenedor (primero se detiene con <em>stop<\/em> y luego se para con <em>kill<\/em>). Y eso no me sirve. <\/p>\n\n\n\n<p>Como se ve en el esquema de arriba los dos componentes tienen que tener acceso mutuo a trav\u00e9s de red para funcionar.  En el caso de estas dos im\u00e1genes est\u00e1 previsto que funcionen por separado as\u00ed que se pueden conectar v\u00eda red a cualquier m\u00e1quina o emplear un enlace especial dentro de <em>docker<\/em>. Por enlace especial me refiero a que <em>docker<\/em> crea un interfaz de red en modo puente, asigna direcciones IP a cada contenedor y tiene mecanismos  para indicar la conexi\u00f3n de un contenedor con otro.  No es problem\u00e1tico mientras no se pongan exquisitos con d\u00f3nde conectar y c\u00f3mo. Yo en cualquier caso prefiero saltarme ese paso  e indicar a docker que usen la red existente y no se l\u00ede creando un puente entre ella y los dem\u00e1s. Son los \u00fanicos procesos del sistema que van a emplear esos puertos y la m\u00e1quina es un frontal a la red que bastante tiene ya la pobre. <\/p>\n\n\n\n<p>He estado consultando algunas gu\u00edas y documentaci\u00f3n y he conseguido entender que, aunque los contenedores est\u00e1n aislados del sistema operativo, existe la posibilidad de compartir datos con \u00e9l.  Los vol\u00famenes son uno de los mecanismos. En la ejecuci\u00f3n de un contenedor se pueden crear asociaciones entre una ruta exterior al mismo y una interior de manera que dicho contenedor tiene el mismo acceso que cualquier otro proceso.<\/p>\n\n\n\n<p>Las variables de entorno son otra de las opciones aunque acordarse de todas ellas, como en el ejemplo de abajo, puede ser complicado: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># docker run  --name consolas-guacamole --network host -e GUACAMOLE_HOME=\/etc\/guacamole --dns 192.168.100.1 -e MYSQL_HOSTNAME=db.empresa.net  -e MYSQL_DATABASE=guacamole -e MYSQL_USER=guacamole -e MYSQL_PASSWORD=XXXXXXXXXXX -e GUACD_HOSTNAME=localhost  -d -v \/etc\/guacamole:\/etc\/guacamole guacamole\/guacamole<\/code><\/pre>\n\n\n\n<p>En el anterior p\u00e1rrafo el volumen montado corresponde a la configuraci\u00f3n del programa que prefiero conservar en el sistema y as\u00ed mantenerlo con m\u00e1s facilidad asegur\u00e1ndome de que sobreviva al reinicio de contenedor.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Docker compose<\/h4>\n\n\n\n<p>El caso es que tener los dos contenedores funcionando es sencillo si est\u00e1s haciendo pruebas, pero como la sintaxis se complica poco a poco es preferible describ\u00edrselo a una herramienta de terceros y que ella se encargue de gestionarlos como un todo. Ah\u00ed es donde entra <a href=\"https:\/\/docs.docker.com\/compose\/\">Docker Compose<\/a>. <\/p>\n\n\n\n<p>Esta herramienta sirve para gestionar varios contenedores relacionados entre s\u00ed, como un todo, con la opci\u00f3n inclusive de integrarlo con systemd o alg\u00fan mecanismo alternativo de arranque de un sistema Linux. <\/p>\n\n\n\n<p>Una vez que tenemos descargadas las dos im\u00e1genes que necesitamos (<a href=\"https:\/\/hub.docker.com\/r\/guacamole\/guacd\">guacamole\/guacd <\/a>y <a href=\"https:\/\/hub.docker.com\/r\/guacamole\/guacamole\">guacamole\/guacamole<\/a>) e inicializada la base de datos que va a utilizar, podemos ponernos con cada contenedor por separado y luego unirlos con el programa <em>compose<\/em>. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>version: '3'\n\nservices:\n  consolas-guacd:\n            hostname: localhost\n            image: guacamole\/guacd\n            network_mode: host\n            dns:\n                - 192.168.100.1\n                - 192.168.100.3\n                - 192.168.100.7  \n            restart: always\n\n  consolas-guacamole:\n            image: guacamole\/guacamole\n            restart: always\n            network_mode: host\n            dns:\n                - 192.168.100.1\n                - 192.168.100.3\n                - 192.168.100.7  \n            env_file:\n                - \/etc\/guacamole\/guacamole.env\n            volumes:\n                - \"\/etc\/guacamole:\/etc\/guacamole\" <\/code><\/pre>\n\n\n\n<p>Y en el archivo indicado sit\u00fao las variables de entorno que necesita para -entre otros- conectar con la base de datos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GUACD_HOSTNAME=localhost\nGUACAMOLE_HOME=\/etc\/guacamole\nMYSQL_HOSTNAME=db.venexma.net\nMYSQL_DATABASE=guacamole\nMYSQL_USER=guacamole\nMYSQL_PASSWORD=XXXXXXXXX<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Lo de la base de datos es muy recomendable por pocas m\u00e1quinas que tengas. Emplear un archivo de configuraci\u00f3n plano est\u00e1 bien pero necesitas acceso <em>ssh<\/em>, luego editar el susodicho archivo y reiniciar los servicios. Usando una base de datos tienes un panel de control que permite a\u00f1adir m\u00e1quinas, usuarios y dem\u00e1s cosas interesantes.<\/p><\/blockquote>\n\n\n\n<p>Para comprobar la sintaxis de un archivo de configuraci\u00f3n se puede emplear el par\u00e1metro <em>config<\/em> de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">victor@barbacana:~\/git\/guacamole-docker$ docker-compose config\nERROR: The Compose file '.\/docker-compose.yml' is invalid because:\nUnsupported config option for services.guacamole: 'network'\nUnsupported config option for services.guacd: 'network'\nservices.guacamole.environment contains {\"GUACD_HOSTNAME\": \"guacd\"}, which is an invalid type, it should be a string\nvictor@barbacana:~\/git\/guacamole-docker$ <\/pre>\n\n\n\n<p>Se puede cambiar el archivo a comprobar con el par\u00e1metro <em>-f<\/em> y si se omite se usa <em>docker-compose.yml<\/em> en el directorio de ejecuci\u00f3n.<\/p>\n\n\n\n<p>Y una vez que los contenedores est\u00e1n en marcha podemos obtener informaci\u00f3n sobre qu\u00e9 ocurre revisando los registros y peg\u00e1ndote con el resultado porque, obviamente, son programas Java:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo docker logs consolas-guacamole\n...\n10:15:18.826 &#91;http-nio-8080-exec-9] DEBUG o.a.i.d.pooled.PooledDataSource - Testing connection 1131696568 ...\n10:15:18.827 &#91;http-nio-8080-exec-9] DEBUG o.a.i.d.pooled.PooledDataSource - Connection 1131696568 is GOOD!\n10:15:18.827 &#91;http-nio-8080-exec-9] DEBUG o.a.i.d.pooled.PooledDataSource - Returned connection 1131696568 to pool.\n$ <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Acceso a trav\u00e9s de Apache<\/h4>\n\n\n\n<p>Crear un frontal web como servidor virtual es bastante sencillo en Apache. He empleado la configuraci\u00f3n habitual que redirige las conexiones en claro a conexiones cifradas y todo lo que queda es la siguiente estrofa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;Location \/>     \n   Require all granted     \n   ProxyPass http:\/\/localhost:8080\/guacamole\/ flushpackets=on \n   ProxyPassReverse http:\/\/localhost:8080\/guacamole\/\n   ProxyPassReverseCookiePath \/guacamole\/ \/ \n&lt;\/Location><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Referencias <\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/guacamole.apache.org\/doc\/gug\/guacamole-docker.html\">Chapter&nbsp;3.&nbsp;Installing Guacamole with Docker<\/a><\/li><li><a href=\"https:\/\/guacamole.apache.org\/doc\/gug\/proxying-guacamole.html\">Chapter&nbsp;4.&nbsp;Proxying Guacamole<\/a><\/li><li><a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/cli\/\">Use the Docker command line<\/a><\/li><li><a href=\"https:\/\/stackoverflow.com\/questions\/23439126\/how-to-mount-a-host-directory-in-a-docker-container\">How to mount a host directory in a Docker container<\/a><\/li><li><a href=\"https:\/\/docs.docker.com\/storage\/bind-mounts\/\">Use bind mounts<\/a><\/li><li><a href=\"https:\/\/picodotdev.github.io\/blog-bitix\/2015\/07\/aplicaciones-multicontenedor-con-docker-compose\/\">Aplicaciones multicontenedor con Docker Compose<\/a><\/li><li><a href=\"https:\/\/docs.docker.com\/compose\/\">Overview of Docker Compose<\/a><\/li><li><a href=\"https:\/\/github.com\/BrowncoatShadow\/compose-guacamole\/blob\/master\/docker-compose.yml\">compose-guacamole\/docker-compose.yml<\/a><\/li><li><a href=\"https:\/\/docs.docker.com\/compose\/compose-file\">Referencia de docker-compose.yml<\/a><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Para el problema de turno, que no es otro que arreglar un sistema donde algunas aplicaciones -tras actualizar el sistema- dejan de funcionar como en este caso me ha ocurrido con Guacamole.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[18,75,41,898,985,723],"class_list":["post-3051","post","type-post","status-publish","format-standard","hentry","category-software","tag-administracion-de-sistemas","tag-apache","tag-debian","tag-docker","tag-docker-compose","tag-guacamole"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=3051"}],"version-history":[{"count":18,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3051\/revisions"}],"predecessor-version":[{"id":3449,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3051\/revisions\/3449"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=3051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=3051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=3051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}