Diagnóstico do Docker - Serviço Amazon Elastic Container

Diagnóstico do Docker

O Docker oferece várias ferramentas de diagnóstico que ajudam a solucionar problemas com os contêineres e as tarefas. Para obter mais informações sobre todos os utilitários de linha de comando do Docker, consulte o tópico Linha de comando do Docker na documentação do Docker. Você pode acessar os utilitários de linha de comando do Docker se conectando a uma instância de contêiner usando SSH. Para mais informações, consulte Conecte-se à sua instância de contêiner usando o console clássico.

Os códigos de saída que os contêineres do Docker relatam também podem fornecer algumas informações de diagnóstico (por exemplo, código de saída 137 significa que o contêiner recebeu um sinal SIGKILL). Para obter mais informações, consulte Status de saída na documentação do Docker.

Listar contêineres do Docker

Você pode usar o comando docker ps na instância de contêiner para listar os contêineres em execução. No exemplo a seguir, somente o agente de contêiner do Amazon ECS está em execução. Para obter mais informações, consulte docker ps na documentação do Docker.

docker ps

Resultado:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cee0d6986de0 amazon/amazon-ecs-agent:latest "/agent" 22 hours ago Up 22 hours 127.0.0.1:51678->51678/tcp ecs-agent

Você pode usar o comando docker ps -a para ver todos os contêineres (até mesmo contêineres parados ou encerrados). Isso é útil para listar contêineres que estejam parando inesperadamente. No exemplo a seguir, o contêiner f7f1f8a7a245 saiu há 9 segundos. Portanto, ele não aparece em uma saída docker ps sem o sinalizador -a.

docker ps -a

Resultado:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db4d48e411b1 amazon/ecs-emptyvolume-base:autogenerated "not-applicable" 19 seconds ago ecs-console-sample-app-static-6-internalecs-emptyvolume-source-c09288a6b0cba8a53700 f7f1f8a7a245 busybox:buildroot-2014.02 "\"sh -c '/bin/sh -c 22 hours ago Exited (137) 9 seconds ago ecs-console-sample-app-static-6-busybox-ce83ce978a87a890ab01 189a8ff4b5f0 httpd:2 "httpd-foreground" 22 hours ago Exited (137) 40 seconds ago ecs-console-sample-app-static-6-simple-app-86caf9bcabe3e9c61600 0c7dca9321e3 amazon/ecs-emptyvolume-base:autogenerated "not-applicable" 22 hours ago ecs-console-sample-app-static-6-internalecs-emptyvolume-source-90fefaa68498a8a80700 cee0d6986de0 amazon/amazon-ecs-agent:latest "/agent" 22 hours ago Up 22 hours 127.0.0.1:51678->51678/tcp ecs-agent

Visualizar logs do Docker

Você pode visualizar os fluxos STDOUT e STDERR para um contêiner com o comando docker logs. Neste exemplo, os logs são exibidos para o contêiner dc7240fe892a e direcionados por meio do comando head para agilizar. Para obter mais informações, vá até docker logs na documentação do Docker.

nota

Os logs do Docker estarão disponíveis na instância do contêiner apenas se você estiver usando o driver de logs json padrão. Se você tiver configurado as tarefas para usar o driver de logs awslogs, os logs do contêiner estarão disponíveis no CloudWatch Logs. Para mais informações, consulte Usar o driver de log awslogs.

docker logs dc7240fe892a | head

Resultado:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.11. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.11. Set the 'ServerName' directive globally to suppress this message [Thu Apr 23 19:48:36.956682 2015] [mpm_event:notice] [pid 1:tid 140327115417472] AH00489: Apache/2.4.12 (Unix) configured -- resuming normal operations [Thu Apr 23 19:48:36.956827 2015] [core:notice] [pid 1:tid 140327115417472] AH00094: Command line: 'httpd -D FOREGROUND' 10.0.1.86 - - [23/Apr/2015:19:48:59 +0000] "GET / HTTP/1.1" 200 348 10.0.0.154 - - [23/Apr/2015:19:48:59 +0000] "GET / HTTP/1.1" 200 348 10.0.1.86 - - [23/Apr/2015:19:49:28 +0000] "GET / HTTP/1.1" 200 348 10.0.0.154 - - [23/Apr/2015:19:49:29 +0000] "GET / HTTP/1.1" 200 348 10.0.1.86 - - [23/Apr/2015:19:49:50 +0000] "-" 408 - 10.0.0.154 - - [23/Apr/2015:19:49:50 +0000] "-" 408 - 10.0.1.86 - - [23/Apr/2015:19:49:58 +0000] "GET / HTTP/1.1" 200 348 10.0.0.154 - - [23/Apr/2015:19:49:59 +0000] "GET / HTTP/1.1" 200 348 10.0.1.86 - - [23/Apr/2015:19:50:28 +0000] "GET / HTTP/1.1" 200 348 10.0.0.154 - - [23/Apr/2015:19:50:29 +0000] "GET / HTTP/1.1" 200 348 time="2015-04-23T20:11:20Z" level="fatal" msg="write /dev/stdout: broken pipe"

Inspecionar contêineres do Docker

Caso tenha o ID do Docker de um contêiner, você pode inspecioná-lo com o comando docker inspect. A inspeção de contêineres apresenta a visão mais detalhada do ambiente no qual um contêiner foi ativado. Para obter mais informações, consulte docker inspect na documentação do Docker.

docker inspect dc7240fe892a

Resultado:

[{ "AppArmorProfile": "", "Args": [], "Config": { "AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": [ "httpd-foreground" ], "CpuShares": 10, "Cpuset": "", "Domainname": "", "Entrypoint": null, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/apache2/bin", "HTTPD_PREFIX=/usr/local/apache2", "HTTPD_VERSION=2.4.12", "HTTPD_BZ2_URL=https://www.apache.org/dist/httpd/httpd-2.4.12.tar.bz2" ], "ExposedPorts": { "80/tcp": {} }, "Hostname": "dc7240fe892a", ...