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安装部署及使用(docker在linux上的安装部署实例讲解)
- docker分配容器资源(Mac为docker和kubectl添加自动补全命令的方法)
- docker容器网络设置(对docker中的overlay式网络详解)
- 用docker搭建redis集群(docker实现redis集群搭建的方法步骤)
- docker容器启动自动执行命令(docker run 运行容器自动结束的解决)
- docker容器管理技巧(Docker容器编排实现过程解析)
- docker垃圾清理(docker磁盘空间清理的解决办法)
- docker安装教程图解(Docker在线、离线安装及其常用命令操作)
- docker指定容器id(Docker批量容器编排的实现)
- 基于docker的平台搭建(基于docker搭建selenium分布式环境)
- docker如何加volume(Dockerfile 中 VOLUME 与 docker -v 的区别说明)
- docker的安装部署(Docker快速安装Zookeeper的详细教程)
- 安全进入docker容器的方法(使用docker部署一个简单的c/c++程序的方法)
- docker怎么使用supervisor(supervisor下的Dockerfile的多服务镜像封装操作)
- docker数据卷挂载和共享目录挂载区别(Docker容器中挂载NFS共享目录的实现)
- 辱华品牌新百伦官宣新代言人IU,个别粉丝希望get爱豆同款(辱华品牌新百伦官宣新代言人IU)
- 巅峰时期被爆床照,曾被选国民最讨厌女星,IU不为人知的黑历史(巅峰时期被爆床照)
- 每天1万吨牛奶倒进下水道,美国大萧条一幕重现(每天1万吨牛奶倒进下水道)
- 如何看待美国数十万加仑牛奶倒下水道 历史又重演了(如何看待美国数十万加仑牛奶倒下水道)
- 历史惊人的相似,美国80万加仑牛奶倒入下水道,意味着什么(历史惊人的相似)
- 美国数十万加仑牛奶倒进下水道,世界会重演1929年的大萧条吗(美国数十万加仑牛奶倒进下水道)
热门推荐
- python实现在同一电脑上tcp通信(Python两台电脑实现TCP通信的方法示例)
- docker映射端口(Docker初级网络端口映射的配置)
- 香港云服务器优化有用吗(香港云服务器优势有哪些?)
- dedecms模板照片(DEDECMS首页调用图片集里的多张图片)
- python爬虫入门代码(python爬虫基础教程:requests库二代码实例)
- SQL Server数据库应用中有用的几个工具
- dede模板栏目调用(织梦DEDECMS5.7栏目列表页分页URL优化列表页重复的解决方案)
- php获取socket连接的详细信息(php使用socket调用http和smtp协议实例小结)
- laravel服务提供者应用场景(Laravel如何创建服务器提供者实例代码)
- docker容器默认内存大小(Docker 修改docker存储位置 修改容器镜像大小限制操作)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9