# 进入容器与调试

URL: https://caijiao.org/docker/containers/debug
Source: docs/docker/containers/debug.md
Description: 本章节介绍如何进入正在运行的 Docker 容器进行调试，包括使用 exec、attach 命令、查看日志、安装调试工具等方法，帮助开发者快速定位问题和优化容器运行。

在开发和运维中，进入运行中的 Docker 容器进行调试是常见需求。本节介绍进入容器的方法和调试技巧。

## 1. 使用 docker exec 进入容器

`docker exec` 可在容器中执行命令或启动交互式终端：

```bash
# 进入容器交互式终端
docker exec -it mycontainer /bin/bash

# 运行单条命令
docker exec mycontainer ls /app
````

* `-i`：保持标准输入打开
* `-t`：分配伪终端

## 2. 使用 docker attach 连接容器

`docker attach` 将终端附加到容器的主进程：

```bash
docker attach mycontainer
```

* 注意：`Ctrl+C` 会发送信号给容器主进程，可能导致容器退出
* `docker exec` 更安全，可避免干扰主进程

## 3. 查看容器日志

```bash
docker logs mycontainer
docker logs -f mycontainer   # 实时查看日志
```

* 查看输出日志有助于定位问题
* 结合日志文件和日志管理工具（如 ELK）使用效果更佳

## 4. 安装调试工具

对于基础镜像较小的容器（如 Alpine），可能需要安装调试工具：

```bash
docker exec -it mycontainer sh
apk add --no-cache bash curl vim
```

* 常用工具：`bash`、`curl`、`vim`、`net-tools` 等

## 5. 网络与端口调试

* 查看网络配置：

```bash
docker exec mycontainer ip addr
docker exec mycontainer netstat -tuln
```

* 端口映射检查：

```bash
docker port mycontainer
```

## 6. 调试最佳实践

* 使用 `docker exec` 进入容器，避免 attach 主进程
* 避免在生产容器中修改关键文件，可使用临时容器调试
* 结合日志、监控和网络工具进行综合调试
* 调试完成后及时退出，保证容器安全与稳定

---

掌握进入容器和调试技巧，可以快速排查问题，提高开发效率和生产环境可靠性。
