Docker容器Created状态到Running的耗时优化

梦宇酱_2617

梦宇酱_2617

2026-03-23

576人浏览

原创

容器从 created 变为 running 的延迟主因是启动初始化阻塞,需精简 entrypoint/cmd 同步操作、优化 volume 挂载、减小镜像体积、合理配置 healthcheck 及调优 dockerd 存储驱动与 ulimit。

docker容器created状态到running的耗时优化

容器从 Created 状态变为 Running 的延迟,通常不是 Docker 本身的问题,而是启动过程中的初始化环节拖慢了节奏。关键在于识别并精简容器启动时的阻塞点。

检查 ENTRYPOINT/CMD 是否存在同步阻塞操作

很多应用镜像在启动脚本中执行耗时操作(如配置生成、依赖下载、健康检查等待),导致容器卡在“创建完成但未就绪”阶段。Docker 将其标记为 Created,直到主进程真正 exec 并持续运行才转为 Running。

  • 用 docker inspect <container> | jq '.State.Status'</container> 确认状态变化时机
  • 临时改用 sh -c "sleep 10" 替换原有 CMD,验证是否仍卡住——若秒级启动,则问题出在原启动逻辑
  • 将长耗时初始化(如证书拉取、DB 连接池预热)改为异步或延迟执行,主进程尽快 exec 到实际服务二进制

避免使用 volume 挂载时的权限/初始化等待

挂载宿主机目录或命名卷时,若目标路径不存在、权限不足,或使用了需要初始化的驱动(如 local-persist),Docker daemon 可能阻塞容器启动流程。

  • 确认挂载路径在宿主机已存在且权限匹配(尤其使用 --user 或非 root 用户时)
  • 对只读挂载加 :ro 显式声明,减少运行时校验开销
  • 避免在容器启动时通过 volume 挂载执行脚本或初始化数据——改用构建阶段 COPY 或 init 容器预处理

精简镜像层与 HEALTHCHECK 干扰

虽然 HEALTHCHECK 不影响容器状态切换,但部分编排工具(如 Docker Compose v2.20+)默认等待健康检查通过才认为服务“就绪”,造成主观上的“启动慢”错觉;同时臃肿镜像会延长 docker run 的元数据准备时间。

  • 确认你观察的是 docker ps 中的 Status 字段(真实状态),而非应用就绪状态
  • 移除镜像中无用的安装包、缓存和调试工具(多阶段构建 + apt clean / apk cache del)
  • 若必须用 HEALTHCHECK,设置合理 --start-period,避免刚启动就触发失败重试

启用 dockerd 的 live-restore 和优化存储驱动

在高负载或使用 overlay2 配合大量小文件的场景下,容器启动时的元数据加载、inode 分配可能成为瓶颈。

  • 确保 /etc/docker/daemon.json 启用 "live-restore": true,避免 daemon 重启导致容器状态重建延迟
  • 使用 overlay2(推荐)而非 aufs 或 devicemapper,并在 SSD 上部署 Docker 根目录
  • 限制容器启动并发数(--default-ulimit nofile=1024:1024)可减少资源争抢,尤其在 CI/CD 批量拉起场景下有效
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2175

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3362

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1136

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3859

7

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.07

357

5

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

745

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

5839

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

6897

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2693

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习