Amazon ECS 中的 Docker 診斷 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon ECS 中的 Docker 診斷

Docker 提供數種診斷工具,可協助您對容器和任務問題進行故障診斷。如需所有可用 Docker 命令列公用程式的詳細資訊,請參閱 Docker 文件中的 Docker CLI 參考。您可以使用 SSH 連線到容器執行個體,存取 Docker 命令列公用程式。

Docker 容器回報的結束代碼,也可以提供一些診斷資訊 (例如,結束代碼 137 表示容器收到 SIGKILL 訊號)。如需詳細資訊,請參閱 Docker 文件中的「結束狀態」。

在 Amazon ECS 中列出 Docker 容器

您可以在您的容器執行個體中使用 docker ps 命令列出執行中的容器。在下列範例中,只有 Amazon ECS 容器代理程式正在執行。如需詳細資訊,請參閱 Docker 文件中的 docker ps

docker ps

輸出:

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

您可以使用 docker ps -a 命令查看所有容器 (甚至是停止或終止的容器)。這有助於列出未預期停止的容器。在下列範例中,容器 f7f1f8a7a245 已在 9 秒前結束,所以 -a 旗標會出現在 docker ps 輸出中。

docker ps -a

輸出:

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

在 Amazon ECS 中檢視 Docker 日誌

您可以使用 docker logs 命令檢視容器的 STDOUTSTDERR 串流。在此範例中,會顯示 dc7240fe892a 容器的日誌,並為簡潔起見使用 head 命令以管道輸送。如需詳細資訊,請前往 Docker 文件中的 docker logs

注意

若您使用預設的 json 日誌驅動程式,則 Docker 日誌僅適用於容器執行個體。如果您已使用 awslogs 日誌驅動程式設定任務,即可在 CloudWatch Logs 中找到容器日誌。如需詳細資訊,請參閱將 Amazon ECS 日誌傳送至 CloudWatch

docker logs dc7240fe892a | head

輸出:

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"

在 Amazon ECS 中檢查 Docker 容器

如果您有容器的 Docker ID,您可以使用 docker inspect 命令來檢查該 Docker ID。檢查容器可提供最詳細的容器啟動環境檢視。如需詳細資訊,請參閱 Docker 文件中的 docker inspect

docker inspect dc7240fe892a

輸出:

[{ "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", ...