解决docker run 或者 docker restart 启动镜像就自动退出

 更新时间:2020年11月21日 14:12:44   作者:程序员阿广  
这篇文章主要介绍了解决docker run 或者 docker restart 启动镜像就自动退出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

执行命令:docker run --name centos8 -d centos /bin/bash,通过docker ps查看正在运行中容器,找不到centos8。

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

[root@MiWiFi-R4A-srv server]$ docker run --name centos8 -d centos /bin/bash
a770630ca865b3c3346a321a383f302ed22af9281be8482f4f4debc59218d0d1
[root@MiWiFi-R4A-srv server]$ docker ps
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES
[root@MiWiFi-R4A-srv server]$ docker ps -a
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS      PORTS    NAMES
a770630ca865  centos    "/bin/bash"    37 seconds ago  Exited (0) 35 seconds ago      centos8

为什么退出?

这是因为docker后台运行,必须有一个前台进程。docker运行的命令如果不是那些一直挂起的命令(e.g. top,ping),就是会自动退出的。而上面的代码中-d centos就是需要执行的指定的命令。命令如果执行完毕了或者应用终结时,容器会自动停止。

解决方法

以前台进程的形式运行

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

比如上面所说的 centos 容器,只需要将启动指令修改为交互方式启动:

docker run --name centos8 -it centos /bin/bash

又或者是Web容器:

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

取巧方式

添加类似于 tail top 这种可以前台运行的程序,持续输出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

自己写脚本

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

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

补充知识:docker中启动容器时CMD调用的sh脚本中if命令报未预期的符号 if[[的解决办法

最近通过Dockerfile编写镜像,CMD中调用的是sh脚本(start.sh)进行启动容器,通过docker run启动时,启动不成功,进行docker logs 容器ID,发现报错为:未预期的符号 if [[

我直接在外部linux系统调用执行start.sh是成功的,通过docker exec 进入容器,在容中调用start.sh也未报错,命令中需要启动的程序都成功启动。脚本直接执行没问题,通过docker run却报错,百思不得其解。

start.sh中报错代码段如下

if [[ -e /home/dc/testnn-aaa.zip ]];then
 rm -rf /home/testnn-aaa
 unzip -q -o -d /home testnn-aaa.zip
 echo "unzip zip finished" 
else 
 echo "dc zip not exist"
fi

经过查阅比较,因为我的start.sh在报错语句之前也有if语句,但是没报错,发现两处区别为第一处if使用的是单[],将代码改为[],则成功,修改如下:

if [ -e /home/dc/testnn-aaa.zip ];then

以上这篇解决docker run 或者 docker restart 启动镜像就自动退出就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 迁移变更Docker默认数据存储目录的步骤详解

    迁移变更Docker默认数据存储目录的步骤详解

    Docker安装的默认数据目录为/var/lib/docker,但是如果/目录挂载的磁盘空间不够,就需要迁移docker数据到其他目录,接下来本就给大家介绍迁移变更Docker默认数据存储目录的操作步骤,需要的朋友可以参考下
    2023-12-12
  • docker中nacos无法访问的问题解决

    docker中nacos无法访问的问题解决

    本文主要介绍了docker中nacos无法访问的问题解决,可能是检查端口映射设置、防火墙设置以及Nacos容器的运行状态等方面,本文就来实现docker中nacos无法访问的问题解决,感兴趣的可以了解一下
    2024-02-02
  • 教你使用Jenkins集成Harbor自动发布镜像

    教你使用Jenkins集成Harbor自动发布镜像

    这篇文章主要介绍了Jenkins 集成 Harbor 自动发布镜像,主要包括Jenkins 脚本式发布镜像及Jenkins 插件式发布镜像的详细过程,本文结合图文实例给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 如何为Go程序创建一个最小的Docker Image详解

    如何为Go程序创建一个最小的Docker Image详解

    这篇文章主要给大家介绍了关于如何为Go程序创建一个最小的Docker Image的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • docker部署apollo详细教程

    docker部署apollo详细教程

    这篇文章主要介绍了docker部署apollo详细教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 什么是Docker? Docker入门教程

    什么是Docker? Docker入门教程

    本文主要涉及Docker的基础知识:Docker的概述、docker容器以及如何安装使用Docker。希望大家能够喜欢
    2017-03-03
  • openwrt安装docker并启动的操作方法

    openwrt安装docker并启动的操作方法

    这篇文章主要介绍了openwrt安装docker并启动的操作方法,首先需要大家在软件包中下载docker和dockerd,然后在建立软连接,在系统加载时启动docker服务,感兴趣的朋友一起看看吧
    2022-03-03
  • Docker镜像+nginx 部署 vue 项目的方法

    Docker镜像+nginx 部署 vue 项目的方法

    这篇文章主要介绍了Docker镜像+nginx 部署 vue 项目的方法,帮助大家更好的使用docke镜像,感兴趣的朋友可以了解下
    2020-10-10
  • Docker构建Jar镜像的方法实现

    Docker构建Jar镜像的方法实现

    本文主要介绍了Docker构建Jar镜像的方法实现,主要包括编写Dockerfile、构建镜像、测试镜像等操作,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • mac通过docker一键部署Nexus3的过程记录

    mac通过docker一键部署Nexus3的过程记录

    编写一些简易的 shell 脚本帮我们快速的搭建服务器,猿们只要按着套路“一步一步”的操作,基本上都可以快速部署服务,这篇文章主要介绍了mac通过docker一键部署Nexus3及安装步骤,需要的朋友可以参考下
    2022-10-10

最新评论