浅谈Docker run 容器处于created状态问题

 更新时间:2021年03月19日 09:22:29   作者:温暖的电波  
这篇文章主要介绍了解决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 数据卷之进阶篇,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • docker安装nginx实现对springboot项目的负载均衡的操作方法

    docker安装nginx实现对springboot项目的负载均衡的操作方法

    这篇文章主要介绍了docker安装nginx实现对springboot项目的负载均衡的操作方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • deepin apt命令安装最新版本的docker的方法

    deepin apt命令安装最新版本的docker的方法

    这篇文章主要介绍了deepin apt命令安装最新版本的docker的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Docker如何固定IP设置的方法

    Docker如何固定IP设置的方法

    本篇文章主要介绍了Docker如何固定IP设置的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 使用Docker-compose离线部署Django应用的方法

    使用Docker-compose离线部署Django应用的方法

    这篇文章主要介绍了使用Docker-compose离线部署Django应用的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • dockerfile的使用及使用dockerfile部署springboot项目的过程

    dockerfile的使用及使用dockerfile部署springboot项目的过程

    Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本,这篇文章主要介绍了dockerfile的使用,使用dockerfile部署springboot项目,需要的朋友可以参考下
    2023-04-04
  • docker desktop镜像迁移详细步骤

    docker desktop镜像迁移详细步骤

    这篇文章主要介绍了Docker Desktop从系统盘C盘迁移到其他盘,步骤包括导出、注销、在新路径重新导入Docker Desktop,并更改镜像存储路径,需要的朋友可以参考下
    2025-03-03
  • Docker-compose安装的全过程

    Docker-compose安装的全过程

    这篇文章主要介绍了Docker-compose安装的全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 如何在Docker中部署运行jar

    如何在Docker中部署运行jar

    这篇文章主要介绍了如何在Docker中部署运行jar问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • docker部署kafka的方法步骤

    docker部署kafka的方法步骤

    本文主要介绍了docker部署kafka的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10

最新评论