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 |
FROM couchbase:latest COPY configure-node.sh /opt/couchbase HEALTHCHECK --interval=5s --timeout=3s CMD curl --fail https://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 run -d --name db arungupta/couchbase:latest |
Compruebe el estado del contenedor Docker:
|
1 2 3 |
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 55b14302671e arungupta/couchbase:latest "/entrypoint.sh /opt/" 2 seconds ago Up 1 seconds (health: starting) 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 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 55b14302671e arungupta/couchbase:latest "/entrypoint.sh /opt/" About a minute ago Up About a minute (healthy) 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 run -d --name db --health-cmd "curl --fail https://localhost:8091/pools || exit 1" --health-interval=5s --timeout=3s arungupta/couchbase |
Los 5 últimos controles de salud de un contenedor pueden obtenerse utilizando la función docker inspeccionar mando:
|
1 |
docker inspect --format='{{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 |
{ "Status": "healthy", "FailingStreak": 0, "Log": [ { "Start": "2016-11-12T03:23:03.351561Z", "End": "2016-11-12T03:23:03.422176171Z", "ExitCode": 0, "Output": " % 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 595k 0 --:--:-- --:--:-- --:--:-- 750kn{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}" }, { "Start": "2016-11-12T03:23:08.423558928Z", "End": "2016-11-12T03:23:08.510122392Z", "ExitCode": 0, "Output": " % 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 309k 0 --:--:-- --:--:-- --:--:-- 375kn{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}" }, { "Start": "2016-11-12T03:23:13.511446818Z", "End": "2016-11-12T03:23:13.58141325Z", "ExitCode": 0, "Output": " {"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"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" }, { "Start": "2016-11-12T03:23:18.583512367Z", "End": "2016-11-12T03:23:18.677727356Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Currentn Dlo{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}ad Upload Total Spent Left Speednr 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0r100 768 100 768 0 0 307k 0 --:--:-- --:--:-- --:--:-- 375kn" }, { "Start": "2016-11-12T03:23:23.679661467Z", "End": "2016-11-12T03:23:23.782372291Z", "ExitCode": 0, "Output": " % Total % Received % Xferd Average Speed Time Time Time Currentn Dload Upload Total Spent Left{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"pools":[{"name":"default","uri":"/pools/default?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/default?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"settings":{"maxParallelIndexers":"/settings/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/settings/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-enterprise","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","public_key":"0.21","asn1":"2.0.4","kernel":"2.16.4","ale":"4.5.1-2844-enterprise","inets":"5.9.8","ns_server":"4.5.1-2844-enterprise","crypto":"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" } ] } |