|
| 1 | +# Docker 容器调试与运行指南 |
| 2 | + |
| 3 | +## 1. Docker 容器状态分析 - Exited (0) 问题 |
| 4 | + |
| 5 | +Docker 容器运行后状态显示为 `Exited (0)` 的原因分析和解决方法: |
| 6 | + |
| 7 | +### 1.1 问题分析 |
| 8 | + |
| 9 | +- **Exited (0)** 表示容器正常退出,没有错误,这通常是因为容器内的主进程已经完成了它的任务并退出了 |
| 10 | +- 可能的原因是容器内的入口点脚本或命令没有正确配置,导致容器在启动后立即退出 |
| 11 | + |
| 12 | +### 1.2 解决方法 |
| 13 | + |
| 14 | +- 检查 Dockerfile 中的 `ENTRYPOINT` 或 `CMD` 指令,确保它们指向一个持续运行的进程或服务 |
| 15 | +- 确保容器内的环境变量和工作目录设置正确,以便容器能够正常运行 |
| 16 | +- 如果需要容器持续运行,可以在 Dockerfile 中添加一个持续运行的命令,例如 `tail -f /dev/null`,或者确保主进程是一个守护进程 |
| 17 | + |
| 18 | +### 1.3 调试技巧 |
| 19 | + |
| 20 | +- 通过 `docker logs <container_id>` 查看容器的日志,以获取更多信息 |
| 21 | +- 如果容器需要运行 JupyterHub 或其他服务,确保相关的配置和依赖项已正确设置 |
| 22 | +- 可以尝试在容器内运行一个交互式 shell:`docker run -it <image_name> /bin/bash`,以便检查容器内的环境和配置 |
| 23 | +- 如果容器需要访问特定的端口或资源,确保在运行容器时正确映射了端口和挂载了必要的卷 |
| 24 | +## 2. 检查基础镜像配置 |
| 25 | + |
| 26 | +如果 Dockerfile 配置没有问题,需要检查 FROM 基础镜像的配置是否正确: |
| 27 | + |
| 28 | +### 2.1 检查基础镜像配置方法 |
| 29 | + |
| 30 | +检查基础镜像的 ENTRYPOINT 和 CMD 配置是否正确,确保它们指向一个持续运行的进程或服务。首先使用 docker inspect 查看基础镜像的详细信息: |
| 31 | + |
| 32 | +```bash |
| 33 | +docker inspect registry.mthreads.com/mcconline/mtt-vllm-public:v0.2.1-kuae1.3.0-s4000-py38 | grep -A 5 Entrypoint |
| 34 | +docker inspect registry.mthreads.com/mcconline/mtt-vllm-public:v0.2.1-kuae1.3.0-s4000-py38 | grep -A 5 Cmd |
| 35 | +``` |
| 36 | + |
| 37 | +### 2.2 示例输出分析 |
| 38 | + |
| 39 | +如果没有输出,说明基础镜像没有设置 ENTRYPOINT 和 CMD。如果有输出,则需要检查输出内容是否是持续运行的进程或服务。 |
| 40 | + |
| 41 | +```json |
| 42 | +{"Entrypoint": [ |
| 43 | + "/workspace/check_status.sh" |
| 44 | + ], |
| 45 | + "OnBuild": null, |
| 46 | + "Labels": {} |
| 47 | + }, |
| 48 | +{"Cmd": [ |
| 49 | + "/bin/bash" |
| 50 | + ], |
| 51 | + "Image": "registry.mthreads.com/mcconline/mtt-vllm-public:v0.2.0-kuae1.3.0", |
| 52 | + "Volumes": null, |
| 53 | + "WorkingDir": "/workspace",} |
| 54 | +``` |
| 55 | + |
| 56 | +这两个输出都不是持续运行的进程或服务,因此需要修改 Dockerfile,添加一个持续运行的命令。 |
| 57 | +## 3. 创建新镜像 |
| 58 | + |
| 59 | +使用 Dockerfile 创建一个新的镜像: |
| 60 | + |
| 61 | +```bash |
| 62 | +git clone https://github.com/MooreThreads/tutorial_on_musa.git |
| 63 | +cd tutorial_on_musa |
| 64 | +docker build -t my-jupyterhub . |
| 65 | +``` |
| 66 | + |
| 67 | +## 4. 运行新镜像 |
| 68 | + |
| 69 | +```bash |
| 70 | +docker run -d \ |
| 71 | + --privileged \ |
| 72 | + -p 8008:8000 \ |
| 73 | + --name=vllm_mtt_service \ |
| 74 | + -w /workspace \ |
| 75 | + -v /data/mtt/:/data/mtt/ \ |
| 76 | + --env MTHREADS_VISIBLE_DEVICES=all \ |
| 77 | + --shm-size=80G \ |
| 78 | + my-jupyterhub |
| 79 | +``` |
| 80 | + |
| 81 | +## 5. 检查容器状态 |
| 82 | + |
| 83 | +```bash |
| 84 | +docker ps -a | grep vllm_mtt_service |
| 85 | +``` |
| 86 | + |
| 87 | +如果容器状态是 `Up`,则表示容器正在运行。如果容器状态是 `Exited (0)`,则表示容器已经正常退出。 |
0 commit comments