资讯专栏INFORMATION COLUMN

Docker随笔记—docker run执行后,容器的状态是Exited的一些困惑

lindroid / 2750人阅读

摘要:问题运行命令后,发现容器并没有跑起来,而是变成了状态。容器的生命周期。要把容器看做是一个多带带的进程及运行环境。其中的值是可以被覆盖的。如下图根据上图中的前两行可知,容器运行后默认执行的是脚本,脚本命令的参数是。

问题:运行docker run -itd -p 5000:5000 --name localregistry registry:2.5 /bin/bash命令后,发现容器并没有跑起来,而是变成了Exited状态。如果将末尾的/bin/bash去掉,容器就能正常的start了

解决:
翻看不少docker资料, 到目前为止,对导致此问题的出现算是有了一个比较清晰的认识。
1.容器的生命周期。要把docer容器看做是一个多带带的进程及运行环境。容器不等价于一个虚拟的操作系统。Docker的开发人员也一直主张doder容器应该只运行一个进程。例如,一个web server服务就是一个进程。docker run命令就是为了运行一个进程。当一个进程结束了,那么docker容器也就结束了。

2.根据问题中描述的现象,两条命令的差别就在与末尾是否添加了/bin/bash这条command。暂且先停住。我们回过头来看docker image是怎么生成的。

3.Dockerfile文件。Dockerfile文件中有两个关键字CMDENTRYPOINT。其中CMD的值是可以被覆盖的。举个栗子:
假设Dockerfile中的内容包含了:

FROM python
CMD ["/home/hello.sh","Hello World"]   
ENTRYPOINT ["/home/hello.sh","xiaoming"]

那么根据CMD可被覆盖的特征来看,如果在docker run后增加了/bin/bash。那么,在镜像run的时候,执行的CMD就变成了/bin/bash。一般镜像文件中两种关键字选用其中之一就可以了。但也可以同时使用。同时使用的时候,CMD中的值会被当作ENTRYPOINT的参数。所以,ENTRYPOINT的内容就变成["/home/hello.sh","/bin/bash"]

4.我们再来看我要启动的registry镜像中都包含了哪些CMD和ENTRYPOINT。如下图:

根据上图中的前两行可知,容器运行后默认执行的是/entrypoint.sh脚本,脚本命令的参数是/etc/docker/regis...。所以,如果我们自己在run的时候添加了新的command,那么镜像内置的执行命令就无法正确执行了,于是容器就Exited了。

最后,准备附上参考资料链接。但由于此文章是跨天写的,有些资料找不到了。大家上网查查CMD与ENTRYPOINT区别的资料的就明白了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27011.html

相关文章

  • Docker 容器操作

    摘要:容器操作启动启动容器启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动。只用参数时,由于没有分配伪终端,界面没有我们熟悉的命令提示符,但命令执行结果仍然可以返回。会发送信号给容器。 容器是 Docker 又一核心概念。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境...

    elina 评论0 收藏0
  • Docker实战之入门】Dockerfile详细分析:构建docker镜像(3)DB镜像

    摘要:脚本运行函数执行完后,删除启动以上是制作镜像的配置文件。镜像必须先镜像,才能镜像。查看容器状态进入到容器中查看数据库只要数据库文件目录存在,可以随意删除重建,恢复很快。 构建DB Docker镜像 mysql的代码文件 [root@Optimus /]# cd docker-training/ [root@Optimus docker-training]# ls centos7 my...

    lingdududu 评论0 收藏0
  • Flux7 Docker 系列教程(二):必备 15 条命令

    摘要:本系列教程翻译自,系列共有九篇,本文译自第二篇。总结本章知识介绍了最基本的十五个命令,接下来的教程将会陆续介绍如何在中运行一个应用以及其他的命令。接下来会在本系列教程结束后补充几篇应用的实例。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第二篇 Part 2: The 15 Commands。 该系列所有文章将参考其他学习...

    chemzqm 评论0 收藏0
  • Flux7 Docker 系列教程(二):必备 15 条命令

    摘要:本系列教程翻译自,系列共有九篇,本文译自第二篇。总结本章知识介绍了最基本的十五个命令,接下来的教程将会陆续介绍如何在中运行一个应用以及其他的命令。接下来会在本系列教程结束后补充几篇应用的实例。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第二篇 Part 2: The 15 Commands。 该系列所有文章将参考其他学习...

    AprilJ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<