Skip to content

Latest commit

 

History

History
171 lines (103 loc) · 7.92 KB

how-to-debug-running-docker-containers.md

File metadata and controls

171 lines (103 loc) · 7.92 KB

如何调试运行中的 Docker 容器

原文:www.kdnuggets.com/how-to-debug-running-docker-containers

如何调试运行中的 Docker 容器

图片由编辑 | Midjourney & Canva

容器有时由于配置问题、应用程序错误或资源限制而表现得异常。在本教程中,我们将通过以 Postgres 容器为例,讲解不同的调试方法。


我们的前三大课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。

2. 谷歌数据分析专业证书 - 提升你的数据分析技能

3. 谷歌 IT 支持专业证书 - 支持你的组织进行 IT


先决条件

要跟随本教程:

  • 你应该在你的开发环境中安装 Docker。如果还没有,获取 Docker

  • 你应该对 Docker 的工作原理和基本命令(如拉取镜像、启动、停止以及管理容器)感到熟悉。

拉取并启动一个 PostgreSQL 容器

首先,让我们从 DockerHub 拉取最新的 PostgreSQL 镜像并启动一个容器。这里,我们使用 docker pull 命令拉取 postgres:16:

$ docker pull postgres:16

一旦拉取完成,你可以使用以下 docker run 命令来启动 postgres 容器。请注意,POSTGRES_PASSWORD 是启动容器所需的环境变量:

$ docker run --name my_postgres -e POSTGRES_PASSWORD=my_postgres_password -d postgres

该命令启动一个名为 my_postgres 的新容器,容器内运行 PostgreSQL。你可以通过运行 docker ps 命令来验证:

$ docker ps

输出结果:

CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS         PORTS      NAMES
5cb6fabbbc8b   postgres:16   "docker-entrypoint.s…"   18 seconds ago   Up 9 seconds   5432/tcp   my_postgres

1. 检查容器

你可以使用 docker inspect 命令来获取容器的详细信息。这对于检查容器的配置、网络设置和状态非常有用:

$ docker inspect my_postgres 

该命令输出一个包含容器所有详细信息的 JSON 对象。你可以使用像 jq 这样的工具来解析和提取这个输出中的特定信息。

docker-inspect

docker inspect my_postgres 的截断输出

2. 查看容器日志

docker logs 命令可以获取正在运行的容器的日志。这对于排查与容器内应用程序相关的问题非常有用。

$ docker logs my_postgres

docker-logs

docker logs my_postgres 的截断输出

3. 在容器内执行命令

有时进入容器并运行一堆诊断命令是有帮助的。你可以使用 docker exec 命令在运行中的容器内执行命令。这对于检查容器的文件系统、环境变量等非常有用。

下面是如何在运行中的容器内启动交互式 shell 会话:

$ docker exec -it my_postgres /bin/bash

此命令在 my_postgres 容器内打开一个交互式 bash shell。这样你可以在容器内运行命令。

4. 检查运行中的进程

docker top 命令显示容器内运行的进程。这有助于识别是否有进程消耗的资源超过预期或是否有任何意外进程正在运行:

$ docker top my_postgres
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
ollama              8116                8096                0                   09:41               ?                   00:00:00            postgres
ollama              8196                8116                0                   09:41               ?                   00:00:00            postgres: checkpointer
ollama              8197                8116                0                   09:41               ?                   00:00:00            postgres: background writer
ollama              8199                8116                0                   09:41               ?                   00:00:00            postgres: walwriter
ollama              8200                8116                0                   09:41               ?                   00:00:00            postgres: autovacuum launcher
ollama              8201                8116                0                   09:41               ?                   00:00:00            postgres: logical replication launcher

5. 附加到容器

docker attach 命令允许你将终端附加到运行中的容器的主进程。这对于调试交互式进程很有用:

$ docker attach my_postgres

注意,附加到容器与 docker exec 不同,因为它连接到容器的主进程并将其标准输出和标准错误流传输到你的终端。

6. 查看资源使用情况

使用 docker stats 命令,你可以获取容器资源使用的实时统计数据,包括 CPU、内存和网络。这对于分析性能问题非常有帮助:

$ docker stats my_postgres

这是一个示例输出:

CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O         PIDS
5cb6fabbbc8b   my_postgres   0.03%     34.63MiB / 3.617GiB   0.94%     10.6kB / 0B   38.4MB / 53.1MB   6

CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O         PIDS
5cb6fabbbc8b   my_postgres   0.03%     34.63MiB / 3.617GiB   0.94%     10.6kB / 0B   38.4MB / 53.1MB   6

CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O         PIDS
5cb6fabbbc8b   my_postgres   0.03%     34.63MiB / 3.617GiB   0.94%     10.6kB / 0B   38.4MB / 53.1MB   6

...

调试 Docker 容器涉及检查容器配置、查看日志、在容器内执行命令以及监控资源使用情况。运用这些技术,你可以有效地排查和解决容器化应用中的问题。祝你调试愉快!

额外资源

如果你想进一步探索,请查看以下资源:

Bala Priya C**** 是一位来自印度的开发者和技术作家。她喜欢在数学、编程、数据科学和内容创作的交汇点上工作。她的兴趣和专长领域包括 DevOps、数据科学和自然语言处理。她喜欢阅读、写作、编程和喝咖啡!目前,她正在通过编写教程、操作指南、观点文章等方式学习和分享她的知识,服务开发者社区。Bala 还创建了引人入胜的资源概述和编码教程。

更多相关话题