容器运行时与 systemd 是什么
容器运行时由 systemd 托管时,单元依赖顺序、重启策略分层与日志驱动都是常见故障点。关键是把两层分清:运行时的服务单元本身,以及容器自己的重启策略,两者的重启语义互不替代。
基本信息
| 用途 | 理解容器运行时与 systemd 的协作关系 |
|---|---|
| 排查入口 | 查看单元状态与对应日志 |
| 依赖声明 | 单元里的先后顺序与依赖关系 |
| 日志去向 | 由运行时的日志驱动决定 |
典型使用场景
- 开机自启:确认运行时与编排组件谁先启动,避免编排组件抢先连接失败
- 升级运行时:升级前后核对单元状态与容器是否自动恢复
- 网络异常:运行时重启后容器网络与防火墙规则需要重新同步
- 容器未恢复:区分是容器重启策略没生效还是编排层没拉起
- 日志定位:容器输出按驱动分流,先确认该去哪里找
常用示例
常用示例
systemctl status docker --no-pager
systemctl is-enabled docker containerd
journalctl -u docker -n 100 --no-pager
systemctl cat docker.service | grep -E 'After|Wants|Restart'
systemctl list-dependencies docker.service | head -n 20分层对照
| 层面 | 配置位置 | 作用范围 |
|---|---|---|
| 运行时单元 | systemd 单元文件 | 运行时进程自身的自启与重启 |
| 容器策略 | 创建容器时指定 | 单个容器退出后的自动重启 |
| 编排层 | 编排工具配置 | 按期望状态拉起与调度 |
| 日志驱动 | 运行时配置 | 决定容器输出写到哪里 |
| 依赖顺序 | 单元里的依赖声明 | 决定开机时的启动次序 |
运行时重启与容器重启是两层:运行时重启后旧容器是否恢复取决于容器的重启策略,先把这两层分清再排查。
运行时与防火墙集成时,重启顺序不当会造成容器网络不通,出现这类现象先核对重启后规则是否完整。
生产环境的容器编排建议交给编排工具而不要裸跑,重启策略与依赖关系由编排层统一声明。