docker容器启动后秒退(解决docker run 或者 docker restart 启动镜像就自动退出)
docker容器启动后秒退
解决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构建本地镜像(Docker创建本地镜像实现方法解析)
- docker镜像简介(详解使用阿里云镜像仓库构建国外Docker镜像)
- docker中的mongodb(Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解)
- docker怎么连接mysql(docker如何安装mysql)
- docker怎么解决隔离性问题(docker启动ES内存溢出的解决方案)
- docker默认网桥设置(Docker默认网段修改实现方法解析)
- docker如何查看容器目录(docker 查看容器的挂载目录操作)
- docker清理脚本(Docker 清理的常用方法及问题)
- docker镜像内安装python包(如何使用Docker搭建pypi私有仓库)
- docker容器的使用过程(详解docker容器的层的概念)
- dockermysql实例(docker 连接宿主Mysql操作)
- docker镜像配置的挂载路径(docker挂载本地目录和数据卷容器操作)
- docker node 分阶段构建(Docker安装、创建镜像、加载并运行NodeJS程序的详细过程)
- harbor 1.8安装部署(docker5 全功能harbor仓库搭建过程)
- docker容器启动执行脚本(在docker容器中使用非root用户执行脚本操作)
- 菲律宾旅游攻略(菲律宾旅游攻略地图)
- 清华大学难考吗(清华大学考研录取分数线)
- 观花盆栽佛肚竹盆景制作及养护(观花盆栽佛肚竹盆景制作及养护)
- 春天养佛肚竹,做好这几件事,叶绿根壮寓意好 越养越旺家(春天养佛肚竹做好这几件事)
- 律界衣品最好,时尚圈学识数高,41岁的Amal堪称现实版的傲骨贤妻(时尚圈学识数高)
- 刘智泰确认出演《Good Wife》 担纲男一号(刘智泰确认出演Good)
热门推荐
- exists在sql中用法(详解sql中exists和in的语法与区别)
- .NET异常处理的几个建议
- canvas 动画线段(canvas简单连线动画的实现代码)
- python正则表达式入门(Python正则表达式实现简易计算器功能示例)
- 看懂云服务器带宽大小的区别(云服务器的流量与带宽是如何换算?)
- laravelblade组件(laravel 验证错误信息到 blade模板的方法)
- pythonturtle库画图代码(用Python中的turtle模块画图两只小羊方法)
- python樱花绽放代码(新年快乐! python实现绚烂的烟花绽放效果)
- js解除网页屏蔽(js检测标题与描述中的关键词发现就替换或跳转到别的页面)
- ASP.NET中Web.config文件的配置
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9