Docker为什么刚运行就退出了
引言
最近群里的好多新接触Docker的朋友,好多都遇到了相同的问题,使用
$ docker run -d ubuntu /bin/bash
运行了一个简单的容器后,然后docker ps -a 进行查看, 会发现容器已经退出了。
其实呢,这个问题并不复杂,了解了下面的内容,我想,你就知道该如何处理了.
根源
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的
这个是 docker 的机制问题,比如你的 web 容器,我们以 nginx 和 fpm 为例,
正常情况下,我们配置启动服务只需要启动响应的 service 即可,例如
service nginx start && service php5-fpm start
但是,这样做, nginx 和 fpm 均为后台进程模式运行,就导致 docker 前台没有运行的应用,
这样的容器,后台启动后,会立即自杀,因为他觉得他没事可做了.
解决方法
1. 最佳的解决方案是,将你要运行的程序以前台进程的形式运行,当然,如果你的容器需要同时启动多个进程,
那么也只需要,或者说只能将其中一个挂起到前台即可.
比如上面所说的 web 容器,我们只需要将启动指令修改为:
service php5-fpm start && nginx -g "daemon off;"
这样,fpm会在容器中以后台进程的方式运行,而nginx则挂起进程至前台运行,这样,就可以保持容器不会认为没事可做而自杀了.
2. 对于有一些你可能不知道怎么前台运行的程序,提供一个投机方案,你只需要在你启动的命令之后,添加类似于 tail top 这种可以前台运行的程序,这里特别推荐 tail ,然后持续输出你的log文件.
还是以上文的web容器为例,我们还可以写成:
service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log
>>>>>END<<<<<<
博客搬运地址
Docker为什么刚运行就退出了的更多相关文章
- [转帖]docker容器保持运行不退出
docker容器保持运行不退出 2019年01月20日 23:21:22 chvalrous 阅读数 1511 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- windows 2008 开机启动 Docker Toolbox 并运行容器
新建 docker-startup.bat @echo off REM Set the name of the VM configuration where dockerd will be hoste ...
- 使用Docker搭建Tomcat运行环境
1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS 内核: # uname -r 2 安装Do ...
- Docker 创建、运行、查看、删除容器
Docker 创建.运行.查看.删除容器 Step 1: 查看docker程序是否存在, 功能是否正常. sudo docker info 若不正常请参考下文: Docker安装和程序创建 Step ...
- 如何在一个Docker中同时运行多个程序进程?
我们都知道Docker容器的哲学是一个Docker容器只运行一个进程,但是有时候我们就是需要在一个Docker容器中运行多个进程 那么基本思路是在Dockerfile 的CMD 或者 ENTRYPOI ...
- Docker 容器的运行(八)
目录 一.运行容器 1.运行第一个容器 2.让容器长期运行 二.进入容器 1.attach 2.exec 3.attach VS exec 4.容器内部都在干些什么 三.停止/启动/重启容器 四.暂停 ...
- DOCKER学习_008:Docker容器的运行最佳实践
一 容器分类 容器按用途大致可分为两类: 服务类容器,如 web server. database等 工具类容器,如cur容器, Iredis-cli容器 通常而言,服务类容器需要长期运行,所以使用 ...
- Docker环境下运行python+selenium+chrome
Docker环境下运行python+selenium+chrome docker运行时占用的资源非常少,而且能将环境进行有效的隔离,可以快速的进行部署,因此可以将docker与selenium结合实现 ...
- Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】
一.前言 Jenkins作为CI.CD的先驱者,虽然现在的风头没有Gitlab强了,但是还是老当益壮,很多中小公司还是使用比较广泛的.最近小编经历了一次Jenkins发包,感觉还不错,所以自己学习了一 ...
随机推荐
- 移动端开发需要加的meta
移动端开发需要加的meta和常用的css3媒体查询样式,移动开发中头部要加的一些常用meta. <meta name="viewport" content="ini ...
- ubuntu 安装codeblocks13.12
通过添加PPA的方法安装: sudo add-apt-repository ppa:pasgui/ppa sudo apt-get update sudo apt-get install codebl ...
- Django 命令行调用模版渲染
首先我们需要进入 Django 的 shell python manage.py shell 渲染模版中的 name from django.template import Context,Templ ...
- Spring核心技术(三)——Spring的依赖及其注入(续)
本文将继续前文,针对依赖注入的细节进行描述 依赖注入细节 如前文所述,开发者可以通过定义Bean的依赖的来引用其他的Bean或者是一些值的,Spring基于XML的配置元数据通过支持一些子元素< ...
- 【18】AngularJS 包含
AngularJS 包含 在 AngularJS 中,你可以在 HTML 中包含 HTML 文件. 在 HTML 中包含 HTML 文件 在 HTML 中,目前还不支持包含 HTML 文件的功能. 服 ...
- Java基础学习总结(80)——Java性能优化详解
让Java应用程序运行是一回事,但让他们跑得快就是另外一回事了.在面对对象的环境中,性能问题就像来势凶猛的野兽.但JVM的复杂性将性能调整的复杂程度增加了一个级别.这里Refcard涵盖了JVM in ...
- BNUOJ 2461 Anniversary party
Anniversary party Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Origi ...
- 模拟退火算fa
转载:http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html 优化算法入门系列文章目录(更新中): 1. 模拟退火算法 2. 遗传算法 ...
- codeforces 371D
#include<stdio.h> #define N 210000 struct node { int x,next; __int64 count,vec; }pre[N]; int n ...
- 个人常用git命令
最近开始使用git,将自己常用git命令做一个简单归纳,便于记忆. 初始化及配置 git init:初始化资料库 git config --global user.name 'xxx':配置用户名 g ...