背景:正在学习docker期间,接到一个任务,通过docker部署一个应用A。该应用A类似于之前部署的应用B,结果很自然地犯了形而上学的错误。

思路:基于dockerfile+docker-compose.yml来部署。

基本操作:编写dockerfile,制作基础镜像;docker-compose.yml作端口映射,数据卷挂载等操作。

出现问题:docker-compose up时,创建容器。docker ps看到容器的状态为restart状态,而不是正常的up。

难点:容器外部docker logs没能查看到容器应用运行的任何日志信息。同时因容器不断处于restart态,无法进入容器内查看应用运行的任何日志信息。

定位:

1、怀疑是docker-compose.yml中设置的内存太少,把内存大小限制设置为4G,没能决定问题。排除内存不够原因。

2、检查docker-compose.yml端口映射,确保没有与现有应用端口冲突。排除端口问题。

3、检查docker-compose.yml中数据卷的挂载及CMD的命令执行参数。排除数据挂载及命令参数问题。

4、怀疑是应用的执行权限问题,可是在不作修改情况下,docker容器中默认用的就是root权限。排除权限问题

5、本地非docker容器内运行该应用,一切正常。排除程序自身问题。

6、容器中前后台进程的影响,A是前台,B后台。(最终元凶)

出现问题原因:dockerfile中的CMD命令,是容器启动后运行的第一条命令,其PID为1。而Docker容器仅在它的1号进程运行时,会保持运行。如果1号进程退出了,Docker容器也就退出了。而我们要部署的应用属于后台进程,容器运行时,pid为1的进程不是A,而是bash,这个bash执行完指令后就挂了。同时因为容器中设置的restart策略为unless-stopped,因此会看到容器一直处于restart态。作为验证,将原本在容器中运行正常的B应用,在其CMD的执行参数中加上&,会看到B容器应用也一直处于restart态。

解决:在运行A应用后增加&&tail -f XXX.log,至此容器运行正常,进入A容器内进行相关区块链测试符合预期。

结论:容器生命周期和其内部PID为1的进程一致。

关于一类docker容器闪退问题定位的更多相关文章

  1. Android使用百度地图出现闪退及定位时显示蓝屏问题

     目录 1.Android使用百度地图出现闪退 2.Android使用百度地图定位出现蓝屏问题     1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.x ...

  2. docker容器化python服务部署(supervisor-gunicorn-flask)

    docker容器化python服务部署(supervisor-gunicorn-flask) 本文系作者原创,转载请注明出处: https://www.cnblogs.com/further-furt ...

  3. docker 启动mysql 闪退 无法启动问题

    docker 安装mysql [获取容器] docker pull mysql:5.6 [启动容器] docker run -p 3306:3306 --name mymysql -v $PWD/co ...

  4. 关于iOS地图定位中点击设置->隐私->定位服务 闪退问题

    iOS8之后,如果应用中用到了地图定位,那么点击设置->隐私->定位服务 再点击该应用有时候会出现闪退问题,其原因是iOS8之后定位中添加了 NSLocationWhenInUseDesc ...

  5. Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」

    Compose 简介 | Docker 从入门到实践 https://vuepress.mirror.docker-practice.com/compose/introduction.html Com ...

  6. 抓取android系统日志_记录一次定位app闪退故障

    在测试android客户端兼容性时,发现app闪退,上海的小伙伴需要闪退时的系统日志:故把快生锈的adb知识拿出来show一把: 1.下载adb工具包(adb的全称为Android Debug Bri ...

  7. docker容器安装及使用技巧

    关于docker前言 A)首先是关于虚拟化 虚拟化我们可以简单的理解为一种资源管理方式.有如下几种虚拟化的方式: 1.完全虚拟化:对底层硬件实现完全的虚拟.例如:Vmware Workstation ...

  8. Docker容器学习梳理 - 基础知识(2)

    之前已经总结了Docker容器学习梳理--基础知识(1),但是不够详细,下面再完整补充下Docker学习的一些基础. Docker是个什么东西 Docker是一个程序运行.测试.交付的开放平台,Doc ...

  9. 6.Docker容器底层实现了解与安全机制

    原文地址: 点击直达 0x00 底层实现 我们以 Docker 基础架构来探究Docke底层的核心技术,简单的包括: Linux 上的命名空间(Namespaces) 控制组(Control grou ...

随机推荐

  1. 哈工大LTP基本使用-分词、词性标注、依存句法分析、命名实体识别、角色标注

    代码 import os from pprint import pprint from pyltp import Segmentor, Postagger, Parser, NamedEntityRe ...

  2. Linux(CentOS7)安装与卸载MySQL8.0图文详解

    Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多,但是对于新手来说,各种不同形式的安装教程,又给新手们带来了要选择哪种方式进行安装的 ...

  3. 机器人走方格-51nod解题

    M * N的方格,一个机器人从左上走到右下,只能向右或向下走. 有多少种不同的走法? 注意:给定 M, N 是一个正整数. 示例 输入: 1行, 2个数M,N,中间用空格隔开.(2 <= m,n ...

  4. Standalone模式下,通过Systemd管理Flink1.11.1的启停及异常退出

    Flink以Standalone模式运行时,可能会发生jobmanager(以下简称jm)或taskmanager(以下简称tm)异常退出的情况,我们可以使用Linux自带的Systemd方式管理jm ...

  5. 『政善治』Postman工具 — 1、Postman介绍与安装

    目录 一.Postman介绍 二.Postman下载与安装 1.Postman下载 2.Postman安装 3.为什么要注册Postman账号 一.Postman介绍 Postman是一款非常流行的H ...

  6. 13- jmeter性能测试案例

    配置原件 HTTP请求默认值 前置处理程序 定时器 取样器 后置处理器:正则表达式提取器 断言 监听器 性能测试流程 1.评估获取性能测试需求(访问量大,操作频繁) 2.确定性能测试目标 : 并发用户 ...

  7. vue 回顾

    ①.组件的注册 全局注册: // 注册 Vue.component('my-component', { template: '<div>A custom component!</di ...

  8. 逆向 stdio.h 函数库 fseek 函数(调试版本)

    0x01 fseek 函数 函数原型:int fseek(FILE *stream, long int offset, int whence) 函数功能:设置流 stream 的文件位置为给定的偏移 ...

  9. 深入浅出带你玩转sqlilabs(一)

    一.MySQL数据库结构分层 1.1库名,表名,列名,数据库用户等 Mysql数据库结构示例: 数据库A zblog = www.zblog.com 表名 列名(字段) 数据 数据库B dede = ...

  10. Openstack 虚拟机宽带限速

    修改Neutron配置文件,使其支持Qos 修改Neutron.conf service_plugins = neutron.services.qos.qos_plugin.QoSPlugin 修改p ...