docker 容器经常启动失败(浅谈Docker run 容器处于created状态问题)
docker 容器经常启动失败
浅谈Docker run 容器处于created状态问题在最近遇到的一次问题中,有这样一种现象:系统有一个测试脚本会不断的执行docker run命令来运行容器,在测试过程中发现有一个情况是,有时候容器没有完全被运行到"Up"状态,而是处于"created"状 态,现象十分奇怪。
上环境首先查看了"created"状态的容器,以及dockerd日志:
(1) dockerd的日志中只有"post create"请求,但是居然没有收到该容器的"post start"请求;
(2) 手动执行docker start是可以将此容器拉起到"Up"状态,说明容器、镜像本身没有问题。
综合上面现象,怀疑是"docker run"流程没有执行完毕,docker run就退出了导致。立刻翻阅"docker run"在cli/command/container/run.go中对于"docker run"命令的处理函数func runRun()的实现中有如下情况:
func runRun(dockerCli *command.DockerCli, flags *pflag.FlagSet, opts *runOptions, copts *runconfigopts.ContainerOptions) error { 。。。。。。 createResponse, err := createContainer(ctx, dockerCli, config, hostConfig, networkingConfig, hostConfig.ContainerIDFile, opts.name) 。。。。。。 if err := client.ContainerStart(ctx, createResponse.ID, types.ContainerStartOptions{}); err != nil {) 。。。。。 }
如果在执行完createContainer()函数后"docker run"命令异常退出(如遇到kill信号),此时ContainerStart()函数无法继续运行。这就会导致容器虽然创建成功处于"created"状态,但是并没有真正的给dockerd"post start",最终造成上述现象。
因而在日常生产过程中有必要对"docker run"命令进行监控,比如判断它是否执行成功,是否异常退出,退出时返回值是否为0等等。
补充:docker运行容器后处于运行状态三种方法
第一种解决方法我们在运行docker容器的时候很多时候处于 Exited状态。
比如下面的命令 docker run -d --name nginx -P nginx /bin/bash 这种交互形式在运行完之后就会退出,重新docker start的也没有用;
如果想在运行之后容器处于运行状态只需把/bin/bash去掉即可。
第二种解决方法docker run -it --name nginxit -P nginx
现在容器nginxit处于退出状态;
只要我们用docker启动下就可以使用
docker start nginxit
docker run -it --name nginxit2 -P nginx /bin/bash
前后台交互需要退出:
root@de4dbb27f905:/# exit
然后再重启:
docker start nginxit2
以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。如有错误或未考虑完全的地方,望不吝赐教。
- docker镜像简介(详解使用阿里云镜像仓库构建国外Docker镜像)
- docker如何访问nginx(基于docker启动nginxssl配置)
- 在windows安装docker详细步骤(Docker 部署 Prometheus的安装详细教程)
- docker可以快速的创建和删除(Docker 命令自动补全的实现)
- dockerfile镜像介绍(使用Dockerfile构建docker镜像)
- 树莓派3B+安装64位ubuntu系统和docker工具的操作步骤详解(树莓派3B+安装64位ubuntu系统和docker工具的操作步骤详解)
- dockernextcloud优化(docker+nextcloud搭建个人云存储系统的实现)
- dockertomcat多开实例(Docker tomcat的设置内存大小配置方式)
- docker创建mysql环境(docker上部署MySQL的示例)
- springbootdocker详解(Spring Boot 2.4 新特性之一键构建Docker镜像的过程详解)
- elasticsearch docker(在Docker中安装Elasticsearch7.6.2的教程)
- docker容器启动执行脚本(在docker容器中使用非root用户执行脚本操作)
- docker的常用的命令(Docker 清理命令集锦)
- docker查看运行容器参数(Docker容器时区调整操作)
- docker gitlab 配置(使用Docker构建一个Git镜像使用clone仓库)
- docker部署mysql多实例(Docker部署mysql一主一从的操作方法)
- 王治郅菜鸟赛季已让八一带入正轨,大郅七大经典语录或是成功秘诀(王治郅菜鸟赛季已让八一带入正轨)
- 庆八一,重读经典红色语录,感悟互联网发展硬道理(重读经典红色语录)
- TVB新剧《黯夜守护者》将播,陈展鹏陈炜首次合作探讨人性(TVB新剧黯夜守护者将播)
- 新晋小花被称女版吴卓羲 将取代滕丽名成为TVB新一代御用女警(新晋小花被称女版吴卓羲)
- 艺人吴卓羲10年警察生涯,演足10年阿Sir,系咩玩法(艺人吴卓羲10年警察生涯)
- 菲律宾潜水(菲律宾潜水价格)
热门推荐
- jquery on绑定hover
- vue基础语法对象(浅析从面向对象思维理解Vue组件)
- ASP.NET文件打包压缩下载
- dedecms文章标题(dedecms5.7后台发布文章提示“标题不能为空”的解决方法)
- pandas读取excel数据教程(详解pandas库pd.read_excel操作读取excel文件参数整理与实例)
- xampp安装后还用配置吗(如何用xampp建立数据库)
- phpstudymysql启动又自动停止(Win下解决phpStudy MySQL启动失败)
- dedecms可以长期使用吗(dedecms5.7 文章不能发布问题探讨及解决方法)
- web服务器和应用服务器区别(web服务器跟app服务器存在什么不同?)
- pythongui实战案例(Python GUI编程完整示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9