Docker 容器生命周期入门:从第一次 run 到学会看日志排障
很多新手第一次用 Docker,流程往往是复制一条 docker run 命令,跑起来就完事。等容器莫名退出、端口访问不了的时候,才发现自己连容器现在是什么状态都说不清。其实容器的生命周期就几个阶段,把对应的命令用熟,日常排障就够用了。
一、先搞清容器的状态
容器不是只有"运行"和"没运行"两种状态。创建之后可以启动、可以暂停、可以停止,停止后还能删除。用 docker ps 只能看到正在运行的容器,加上 -a 才能看到全部,包括已经退出的。新手最常见的误会就是:docker ps 里找不到容器,就以为容器"丢了",其实它只是退出了,在 docker ps -a 里躺着呢。
二、run 之前先想清楚三件事
第一,端口映射的顺序是"宿主机端口:容器端口",写反了是新手最高频的错误。第二,数据要不要持久化:容器删了数据就没了,重要数据提前用 -v 挂载卷。第三,给容器起一个有意义的名字,后续所有操作都方便。把这三件事在 run 之前想一遍,能省掉后面一半的返工。
三、容器退出了,先看日志再看退出码
用 docker logs 看输出,加 --tail 100 只看最后 100 行,加 -f 持续跟踪。日志没头绪时,用 docker inspect 看 State 里的退出码:0 是正常退出,137 通常是内存不足被系统杀掉,125 多半是启动参数本身有问题。退出码就是容器留给你的遗言,先读遗言再动手。
四、想进容器看看,用 exec 别用 attach
docker exec -it 容器名 bash 会在运行中的容器里开一个新终端,退出时不影响主进程。而 attach 会接到主进程的标准输入输出,一不小心按下 Ctrl+C 就可能把主进程停掉,在正经环境里千万别顺手用。
五、停容器时给它一点时间
docker stop 会先发 SIGTERM 让进程优雅退出,默认等 10 秒还不停才强杀。数据库这类容器直接强杀容易丢数据。反过来,如果 stop 每次都等满 10 秒,多半是容器里的进程没有正确处理 SIGTERM 信号,可以检查一下启动方式。
把 ps -a、logs、inspect、exec、stop 这几个命令练熟,再配合官方文档查参数,Docker 的日常使用就通关了一大半。容器从来不是黑盒子,它每一步状态都明明白白写在那里,只等你去看。
- 点赞
- 收藏
- 关注作者
评论(0)