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私有库的搭建实现)
- OpenLDAP docker使用教程(Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法)
- docker load镜像报错(Docker load之后镜像名字为none问题解决方法)
- 阿里云docker 基础镜像(Docker 配置阿里云容器服务操作)
- 2022-01-26 01:41:54
- docker如何改tomcat(docker安装Tomcat 404问题的解决方案)
- docker删除多个镜像命令(Docker 彻底删除私有库镜像的操作)
- dockerfile的镜像原理(dockerfile制作apache镜像的方法)
- docker镜像实例(Docker的镜像制作与整套项目一键打包部署的实现)
- docker redis安装配置(在docker中部署并启动redis的方法)
- docker停止删除所有容器方法(Docker stop停止/remove删除所有容器)
- dockervolume迁移工具(Docker中数据卷volume管理的两种方式)
- docker 快速搭建环境(如何自己搭建DockerHub实现过程解析)
- docker 部署springboot项目(Spring Boot Docker打包工具小结)
- docker容器内查看内存占用(docker 查看进程, 内存, cup消耗的情况)
- docker容器启动失败怎么查找原因(解决docker容器启动后马上退出的问题)
- ()
- 800壮士拼死拖住30万日军 八佰 的真实历史,誓与阵地共存亡(800壮士拼死拖住30万日军)
- 演员陈创,火于 哮天犬 ,颠峰于 福贵 ,现状却令人唏嘘(演员陈创火于哮天犬)
- 幼小衔接-20以内看图读数 写数 数的组成练习题(幼小衔接-20以内看图读数)
- 你只要花上20天记单词,英语成绩就能从57提到100(你只要花上20天记单词)
- 夕云天际飞,亢龙化太极(夕云天际飞亢龙化太极)
热门推荐
- css里margin是什么意思(正确理解CSS中的margin合并的用法)
- 自己在做项目过程中的php知识(PHP+Oracle本地开发环境搭建方法详解)
- django框架全面讲解(Django uwsgi Nginx 的生产环境部署详解)
- dedecms屏蔽规则(织梦dedecms修改任意管理员漏洞处理方法)
- mysql如何解析binlog(MySQL的binlog日志使用详解)
- docker的一些使用方法(使用Docker 安装 Jenkins的方法)
- 云主机跟云服务器有什么区别(浅析云主机的特点和优势)
- mysql操作时间的函数(一篇文章搞定Mysql日期时间函数)
- sql数据拆分插入另一个表(Sql Server数据把列根据指定内容拆分数据的方法实例)
- vue三种判断条件(Vue中插槽和过滤器的深入讲解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9