Una de las nuevas características de Docker 1.12 es cómo la comprobación de la salud de un contenedor puede ser incorporada en la definición de la imagen. Y esto puede ser anulado en la línea de comandos. Al igual que el CMD
instrucción, puede haber múltiples HEALTHCHECK
en Dockerfile, pero sólo la última es efectiva.
Esta es una gran adición porque un contenedor que informa de su estado como Hasta 1 hora
puede devolver errores. El contenedor puede estar activo pero no hay forma de que la aplicación dentro del contenedor proporcione un estado. Esta instrucción lo soluciona.
En Dockerfile que construye arungupta/couchbase imagen es:
1 2 3 4 5 6 7 |
DESDE couchbase:última COPIA configure-nodo.sh /op/couchbase HEALTHCHECK --intervalo=5s --tiempo de espera=3s CMD rizo --falla http://localhost:8091/pools ||| exit 1 CMD ["/opt/couchbase/configure-node.sh"] |
Utiliza configure-node.sh
para configurar el servidor mediante API REST de Couchbase. La nueva instrucción a tener en cuenta aquí es HEALTHCHECK
. Esta instrucción se puede especificar como:
1 |
HEALTHCHECK CMD |
En puede ser:
--intervalo=DURACIÓN
(por defecto 30s)--timeout=DURACIÓN
(por defecto 30s)--retries=N
(por defecto 3)
En es el comando que se ejecuta dentro del contenedor para comprobar su estado. Si la comprobación de salud está activada, el contenedor puede tener tres estados:
Inicio
- Estado inicial cuando el contenedor aún está arrancandosaludable
- Si el comando tiene éxito, entonces el contenedor está sano- insalubre - Si una sola ejecución de la
tarda más que el tiempo de espera especificado, entonces se considera no saludable. Si una comprobación de estado falla, se ejecutarán reintentos varias veces y el estado del contenedor Docker se declarará no saludable si sigue fallando.
El estado de salida de los comandos Docker indica el estado HEALTHCHECK del contenedor. Se permiten los siguientes valores:
0
- el recipiente es saludable1
- el contenedor no es saludable
En nuestra instrucción, /piscinas
La API REST se invoca utilizando curl. Si el comando falla, se mostrará un estado de salida 1
y esto marca al contenedor como no saludable para ese intento. Este comando Docker HEALTHCHECK se invoca cada 5 segundos. El contenedor se marca como no saludable si el comando no regresa con éxito en 3 segundos. Ejecute el contenedor como:
1 |
docker ejecute -d --nombre db arungupta/couchbase:última |
Compruebe el estado del contenedor Docker:
1 2 3 |
docker ps CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES 55b14302671e arungupta/couchbase:última "/entrypoint.sh /opt/" 2 segundos hace Arriba 1 segundos (salud: Inicio) 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp db |
Observe cómo salud: inicio
se informa del estado en ESTADO
columna. Comprobación después de unos segundos muestra el estado:
1 2 3 |
docker ps CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES 55b14302671e arungupta/couchbase:última "/entrypoint.sh /opt/" Acerca de a minuto hace Arriba Acerca de a minuto (saludable) 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp db |
Y ahora se informa de que está sano. Más detalles HEALTHCHECK
instrucciones en docs.docker.com. Ahora bien, si está ejecutando una imagen que no tiene HEALTHCHECK
entonces la instrucción docker run
para especificar valores similares. Un comando equivalente en tiempo de ejecución sería:
1 |
docker ejecute -d --nombre db --salud-cmd "curl --fail http://localhost:8091/pools || exit 1" --salud-intervalo=5s --tiempo de espera=3s arungupta/couchbase |
Los 5 últimos controles de salud de un contenedor pueden obtenerse utilizando la función docker inspeccionar
mando:
1 |
docker inspeccionar --formato='{{json .State.Health}}' db |
La salida se muestra como:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
{ "Estado": "saludable", "FailingStreak": 0, "Log": [ { "Inicio": "2016-11-12T03:23:03.351561Z", "Fin": "2016-11-12T03:23:03.422176171Z", "ExitCode": 0, "Salida": " % Total % Recibido % Xferd Velocidad Media Tiempo Tiempo Tiempo Actualn Dload Upload Total Gastado Izquierda Speednr 0 0 0 0 0 0 0 0 --:--:--:--:--:--:--:--:--:-- 0r100 768 100 768 0 0 595k 0 --:--:--:--:--:--:--:-- 750kn{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nombre":"por defecto","uri":"/piscinas/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/piscinasStreaming/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"ajustes":{"maxParallelIndexers":"/ajustes/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/ajustes/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentesVersión":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_clave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","ale":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","cripto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}" }, { "Inicio": "2016-11-12T03:23:08.423558928Z", "Fin": "2016-11-12T03:23:08.510122392Z", "ExitCode": 0, "Salida": " % Total % Recibido % Xferd Velocidad Media Tiempo Tiempo Tiempo Actualn Dload Upload Total Gastado Izquierda Speednr 0 0 0 0 0 0 0 0 --:--:--:--:--:--:--:--:-- 0r100 768 100 768 0 0 309k 0 --:--:--:--:--:--:--:-- 375kn{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nombre":"por defecto","uri":"/piscinas/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/piscinasStreaming/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"ajustes":{"maxParallelIndexers":"/ajustes/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/ajustes/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentesVersión":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_clave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","ale":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","cripto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}" }, { "Inicio": "2016-11-12T03:23:13.511446818Z", "Fin": "2016-11-12T03:23:13.58141325Z", "ExitCode": 0, "Salida": " {"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nombre":"por defecto","uri":"/piscinas/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/piscinasStreaming/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"ajustes":{"maxParallelIndexers":"/ajustes/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/ajustes/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentesVersión":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_clave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","ale":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","cripto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}} % Total % Received % Xferd Average Speed Time Time Time Currentn Dload Upload Total Spent Left Speednr 0 0 0 0 0 0 0 0 --:--:--:--:--:--:--:-- 0r100 768 100 768 0 0 248k 0 --:--:--:--:--:--:--:-- 375kn" }, { "Inicio": "2016-11-12T03:23:18.583512367Z", "Fin": "2016-11-12T03:23:18.677727356Z", "ExitCode": 0, "Salida": " % Total % Recibido % Xferd Velocidad Media Tiempo Tiempo Actualn Dlo{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nombre":"por defecto","uri":"/piscinas/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/piscinasStreaming/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"ajustes":{"maxParallelIndexers":"/ajustes/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/ajustes/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentesVersión":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_clave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","ale":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","cripto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}ad Upload Total Gastado Izquierda Speednr 0 0 0 0 0 0 0 0 --:--:--:--:--:--:-- 0r100 768 100 768 0 0 307kn 0 --:--:--:--:--:--:--:--:-- 375kn" }, { "Inicio": "2016-11-12T03:23:23.679661467Z", "Fin": "2016-11-12T03:23:23.782372291Z", "ExitCode": 0, "Salida": " % Total % Recibido % Xferd Velocidad Media Tiempo Tiempo Tiempo Actualn Dload Upload Total Gastado Izquierda{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nombre":"por defecto","uri":"/piscinas/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/piscinasStreaming/por defecto?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"ajustes":{"maxParallelIndexers":"/ajustes/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/ajustes/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentesVersión":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_clave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","ale":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","cripto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}} Speednr 0 0 0 0 0 0 0 0 --:--:--:--:--:--:--:-- 0r100 768 100 768 0 0 439k 0 --:--:--:--:--:--:-- 750kn" } ] } |