Um dos novos recursos do Docker 1.12 é como a verificação de integridade de um contêiner pode ser incorporada à definição da imagem. E isso pode ser substituído na linha de comando. Assim como o CMD
instrução, pode haver vários VERIFICAÇÃO DE SAÚDE
no Dockerfile, mas somente a última é eficaz.
Essa é uma ótima adição, pois um contêiner que informa o status como Até 1 hora
pode retornar erros. O contêiner pode estar ativo, mas não há como o aplicativo dentro do contêiner fornecer um status. Essa instrução corrige isso.
O Dockerfile que constrói arungupta/couchbase A imagem é:
1 2 3 4 5 6 7 |
DE couchbase:mais recente CÓPIA configurar-nó.sh /optar/couchbase VERIFICAÇÃO DE SAÚDE --intervalo=5s --tempo limite=3s CMD enrolar --falhar http://localhost:8091/pools || exit 1 CMD ["/opt/couchbase/configure-node.sh"] |
Ele usa configure-node.sh
para configurar o servidor usando API REST do Couchbase. A nova instrução a ser observada aqui é VERIFICAÇÃO DE SAÚDE
. Essa instrução pode ser especificada como:
1 |
VERIFICAÇÃO DE SAÚDE CMD |
O pode ser:
--intervalo=DURAÇÃO
(padrão 30s)--timeout=DURATION
(padrão 30s)--retries=N
(padrão 3)
O é o comando que é executado dentro do contêiner para verificar sua integridade. Se a verificação de integridade estiver ativada, o contêiner poderá ter três estados:
início
- Status inicial quando o contêiner ainda está sendo iniciadosaudável
- Se o comando for bem-sucedido, o contêiner estará íntegro- insalubre - Se uma única execução do
demorar mais do que o tempo limite especificado, ele será considerado insalubre. Se uma verificação de integridade falhar, novas tentativas serão executadas várias vezes e o status do contêiner do Docker será declarado insalubre se ainda falhar.
O status de saída dos comandos do Docker indica o status do HEALTHCHECK do contêiner. Os seguintes valores são permitidos:
0
- o contêiner é saudável1
- o contêiner não é saudável
Em nossa instrução, /pools
A API REST é chamada usando curl. Se o comando falhar, um status de saída de 1
é retornado, e isso marca o contêiner como não saudável para essa tentativa. Esse comando Docker HEALTHCHECK é chamado a cada 5 segundos. O contêiner é marcado como não saudável se o comando não retornar com êxito em 3 segundos. Execute o contêiner como:
1 |
doca executar -d --nome db arungupta/couchbase:mais recente |
Verifique o status do contêiner do Docker:
1 2 3 |
doca ps CONTAINER ID IMAGEM COMANDO CRIADO STATUS PORTOS NOMES 55b14302671e arungupta/couchbase:mais recente "/entrypoint.sh /opt/" 2 segundos atrás Para cima 1 segundos (saúde: início) 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp db |
Observe como saúde: início
O status é relatado no STATUS
coluna. A verificação após alguns segundos mostra o status:
1 2 3 |
doca ps CONTAINER ID IMAGEM COMANDO CRIADO STATUS PORTOS NOMES 55b14302671e arungupta/couchbase:mais recente "/entrypoint.sh /opt/" Sobre a minuto atrás Para cima Sobre a minuto (saudável) 8091-8094/tcp, 11207/tcp, 11210-11211/tcp, 18091-18093/tcp db |
E agora ele é relatado como saudável. Mais detalhes sobre isso VERIFICAÇÃO DE SAÚDE
As instruções podem ser encontradas em docs.docker.com. Agora, se você estiver executando uma imagem que não tenha VERIFICAÇÃO DE SAÚDE
então a instrução execução do docker
pode ser usado para especificar valores semelhantes. Um comando de tempo de execução equivalente seria:
1 |
doca executar -d --nome db --saúde-cmd "curl --fail http://localhost:8091/pools || exit 1" --saúde-intervalo=5s --tempo limite=3s arungupta/couchbase |
As últimas 5 verificações de integridade de um contêiner podem ser obtidas usando o inspeção de docas
comando:
1 |
doca inspecionar --formato='{{json .State.Health}}' db |
A saída é mostrada 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": "saudável", "FailingStreak": 0, "Registro": [ { "Iniciar": "2016-11-12T03:23:03.351561Z", "Fim": "2016-11-12T03:23:03.422176171Z", "ExitCode" (código de saída): 0, "Saída": " % Total % Recebido % Transferido Velocidade média Tempo Tempo Tempo Tempo Tempo Atual Carregamento Upload Total Gasto Velocidade Esquerda 0 0 0 0 0 0 0 0 0 --:--:-- --:--:--:--:--:-- 0r100 768 100 768 0 0 595k 0 --:--:--:--:--:--:--:--:--:-- 750kn{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nome":"padrão","uri":"/piscinas/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"configurações":{"maxParallelIndexers":"/configurações/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/configurações/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_chave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","cerveja":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","criptografia":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}" }, { "Iniciar": "2016-11-12T03:23:08.423558928Z", "Fim": "2016-11-12T03:23:08.510122392Z", "ExitCode" (código de saída): 0, "Saída": " % Total % Recebido % Transferido Velocidade média Tempo Tempo Tempo Tempo Tempo Atual Carregamento Upload Total Gasto Velocidade esquerda 0 0 0 0 0 0 0 0 0 --:--:-- --:--:--:--:--:-- 0r100 768 100 768 0 0 309k 0 --:--:--:--:--:--:--:--:--:--:-- 375kn{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nome":"padrão","uri":"/piscinas/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"configurações":{"maxParallelIndexers":"/configurações/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/configurações/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_chave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","cerveja":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","criptografia":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}}" }, { "Iniciar": "2016-11-12T03:23:13.511446818Z", "Fim": "2016-11-12T03:23:13.58141325Z", "ExitCode" (código de saída): 0, "Saída": " {"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nome":"padrão","uri":"/piscinas/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"configurações":{"maxParallelIndexers":"/configurações/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/configurações/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_chave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","cerveja":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","criptografia":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}} % Total % Recebido % Transferido Velocidade média Tempo Tempo Tempo Tempo Tempo Atual Carregamento Upload Total Gasto Velocidade esquerda 0 0 0 0 0 0 0 0 0 0 --:--:-- -- --:--:-- --:--:-- 0r100 768 100 768 0 0 248k 0 --:--:-- --:--:--:--:--:--:--:--:-- 375kn" }, { "Iniciar": "2016-11-12T03:23:18.583512367Z", "Fim": "2016-11-12T03:23:18.677727356Z", "ExitCode" (código de saída): 0, "Saída": " % Total % Recebido % Transferido Velocidade média Tempo Tempo Tempo Tempo Atual Dlo{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nome":"padrão","uri":"/piscinas/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"configurações":{"maxParallelIndexers":"/configurações/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/configurações/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_chave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","cerveja":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","criptografia":"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 0 --:--:-- --:--:-- --:--:--:-- 0r100 768 100 768 0 0 307k 0 --:--:--:--:--:--:--:--:--:--:-- 375kn" }, { "Iniciar": "2016-11-12T03:23:23.679661467Z", "Fim": "2016-11-12T03:23:23.782372291Z", "ExitCode" (código de saída): 0, "Saída": " % Total % Recebido % Transferido Velocidade média Tempo Tempo Tempo Tempo Atual Carga Upload Total Gasto Esquerda{"isAdminCreds":true,"isROAdminCreds":false,"isEnterprise":true,"piscinas":[{"nome":"padrão","uri":"/piscinas/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969","streamingUri":"/poolsStreaming/padrão?uuid=1b84cdbd136e4e8466049dd062dd6969"}],"configurações":{"maxParallelIndexers":"/configurações/maxParallelIndexers?uuid=1b84cdbd136e4e8466049dd062dd6969","viewUpdateDaemon":"/configurações/viewUpdateDaemon?uuid=1b84cdbd136e4e8466049dd062dd6969"},"uuid":"1b84cdbd136e4e8466049dd062dd6969","implementationVersion":"4.5.1-2844-empresa","componentsVersion":{"lhttpc":"1.3.0","os_mon":"2.2.14","público_chave":"0.21","asn1":"2.0.4","núcleo":"2.16.4","cerveja":"4.5.1-2844-empresa","inets":"5.9.8","ns_servidor":"4.5.1-2844-empresa","criptografia":"3.2","ssl":"5.3.3","sasl":"2.3.4","stdlib":"1.19.4"}} Velocidade 0 0 0 0 0 0 0 0 0 --:--:-- --:--:--:-- --:--:--:-- 0r100 768 100 768 0 0 439k 0 --:--:--:-- --:--:--:--:--:--:-- 750kn" } ] } |