怎么解决Docker run容器处于created状态问题
小编给大家分享一下怎么解决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 run容器处于created状态问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341