Docker启动镜像就自动退出问题及解决

 更新时间:2023年07月27日 14:48:54   作者:蓝绿色~菠菜  
这篇文章主要介绍了Docker启动镜像就自动退出问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Docker启动镜像就自动退出问题

一、问题引入

根据镜像启动容器,执行命令如下:docker run --name mycentos -d centos,通过docker ps查看正在运行中容器,缺找不到mycentos容器。

再次通过docker ps -a查看发现,mycentos容器已经处于停止状态了。

二、原因

Docker容器后台运行,就必须有一个前台进程.

容器运行的命令如果不是那些一直挂起的命令(eg. 运行top,tail等),就是会自动退出

这个是 docker 的机制问题,比如我们的 web 容器,以 nginx 和 fpm 为例, 

正常情况下,启动服务只需启动相应的 service 即可,例如:service nginx start && service php5-fpm start,但是,这样做, nginx 和 fpm 均以后台进程模式运行,就会导致 docker 前台没有正在运行的应用,

so,容器会立即自杀,因为他觉得没事可做了。

三、解决方案

3.1 将要运行的程序以前台进程的形式运行

将要运行的程序以前台进程的形式运行,如果容器需要同时启动多个进程,那么也只需要将其中一个挂起到前台即可。 

比如上面所说的 web 容器,只需要将启动指令修改为:

service php5-fpm start && nginx -g "daemon off;"

3.2 投机方案

对于可能不知道怎么前台运行的程序,提供一个投机方案,只需要在启动的命令之后,添加类似于 tail top 这种可以前台运行的程序,这里推荐tail ,然后持续输出log文件即可。

service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log

再以上面所说的 web 容器为例,可以写成:

service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log

3.3 以centos/ubuntu为例

同3.1,在启动centos/ubuntu容器时,可以做一个手脚:做一个死循环,持续输出任意,这样容器不会认为没事可做而自杀了。

docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"

3.4 docker run 直接进入容器内

docker  run  -it  image_id  /bin/bash 或
docker  run  -it  image_id  /bin/sh

记录docker启动镜像自动关闭的问题

问题复现

今天装dockerui-portainer图形化时,安装完镜像,启动之后总是自动退出。

解决办法(我是直接用的第二种)

在启动脚本里面增加一个执行进程:

tail -f /dev/null

如果是别人的镜像你不想修改,可以用-dit参数

docker run -dit --name ubuntu2 ubuntu

docker run -d --name ubuntu ubuntu /bin/bash -c "tail -f /dev/null"

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker-compose如何自定义network

    docker-compose如何自定义network

    文章介绍了在DockerCompose中如何通过networks配置定义和使用桥接网络,包括如何在docker-compose.yml文件中指定使用bridge网络,服务间的通信方式以及如何为服务分配特定的IP地址
    2025-01-01
  • Docker及Docker-Compose的实例用法

    Docker及Docker-Compose的实例用法

    在本篇文章里小编给大家整理的是关于Docker及Docker-Compose的实例用法,需要的朋友们可以学习参考下。
    2020-02-02
  • docker启动logstash失败的问题及解决(可能原因)

    docker启动logstash失败的问题及解决(可能原因)

    这篇文章主要介绍了docker启动logstash失败的问题及解决(可能原因),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Docker 中的 bootfs、rootfs 简介

    Docker 中的 bootfs、rootfs 简介

    Docker中的bootfs和rootfs是容器文件系统的两个层次,bootfs负责内核启动,而rootfs提供运行环境,容器共享宿主机内核,因此没有独立的bootfs,只使用精简的rootfs,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • linux和docker下mysql安装方式

    linux和docker下mysql安装方式

    本文详细介绍了在Linux系统中通过命令行安装MySQL的步骤,包括编辑yum源、下载并启动MySQL服务、登录和修改密码等操作,同时,文中也提供了在Docker环境下安装MySQL的流程,涵盖了拉取MySQL镜像、查看运行状态及登录MySQL的方法
    2024-09-09
  • docker部署管理工具portainer-ce的实现

    docker部署管理工具portainer-ce的实现

    Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境,本文主要介绍了docker部署管理工具portainer-ce的实现,感兴趣的可以了解一下
    2023-08-08
  • 一次docker错误的耗时排查过程记录

    一次docker错误的耗时排查过程记录

    这篇文章主要给大家介绍了一次docker错误的耗时排查过程记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • PVE下扩展openwrt for x86分区大小方式

    PVE下扩展openwrt for x86分区大小方式

    本文介绍了在PVE环境下如何对OpenWRT虚拟机的分区进行扩容,包括磁盘调整、软件安装、分区配置和系统引导等步骤,操作前需做好备份,以防数据丢失
    2024-10-10
  • 3分钟带你学会docker搭建帕鲁服务器

    3分钟带你学会docker搭建帕鲁服务器

    幻兽帕鲁已经正式开服,目前在线人数已经超过7W+,很多玩家想自己创建服务器和朋友一起联机游玩,本文主要介绍了3分钟带你学会docker搭建帕鲁服务器,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 谈谈我对docker的理解

    谈谈我对docker的理解

    作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。这篇文章给大家介绍了docker的优势及docker的三个基本概念,感兴趣的朋友一起看看吧
    2016-10-10

最新评论