有一台机器没有如往常一样起来,该服务器是docke上的一个容器,然后登录docker宿主机,开始问题分析及解决:
今日内网断电后,有一台机器没有如往常一样起来,该服务器是docke上的一个容器,然后登录docker宿主机,开始问题分析及解决:
一、寻找问题
1、启动iframe-test机器
root@ubuntu:~#docker start iframe-test
iframe-test
2、发现没有容器进程
root@ubuntu:~#docker ps |grep iframe-test
3、查看日志,发现是nginx配置有问题,导致中断。
root@ubuntu:~# docker logs iframe-test
Startingnginx: Starting periodic command scheduler: cron.
nginx:[emerg] unexpected end of file, expecting ";" or "}" in/etc/nginx/nginx.conf:21
nginx:configuration file /etc/nginx/nginx.conf test failed
二、思考解决方法
问题原因找到,就是nginx文件检测不通过,导致中断。
解决思路暂有两个:
方法一:把这个问题容器用docker commit提交到一个新的镜像,然后用docker run -i -d基于新镜像运行一个临时终端进去改变配置文件,然后把临时终端的id提交到一个新的镜像,然后在基于新的镜像重新启动容器。(这个方法步骤多,而且提交了新的镜像,对于后续维护增加了复杂性)
方法二:直接改变容器里的配置文件,不需要新提交镜像。但是这个容器是宕状态,怎么改呢?下面进行详细说明。在此多谢网友Lingx是供解决思路。
三、修改宕机容器配置
所有的容器数据都存在/var/lib/docker/aufs/diff/路径下。下面容器ID目录,以init结尾的是放配置文件的,有/etc/host、reselv.conf,/dev等。另一个是放的文件目录,比如/home,/var/及自己安装的服务等等,aufs需要内核3.10以上的支持。
1、查看容器id
root@ubuntu:~#docker ps -a|grep iframe-test
fa02f8084b63 debian06-base:latest
2、查找nginx.conf配置文件路径
root@ubuntu:~#find / -name 'nginx.conf'
/root/nginx.conf
/var/lib/docker/aufs/diff/7c7b3438586e0653cdca7977a4f889cfdca300f008771462f8a2e6e9d3bc5b84/etc/nginx/nginx.conf
/var/lib/docker/aufs/diff/6bc6a9a5aeb59e19cae8bb78daa481cc465051069c7854528cbfdb3c9c1f2bfb/etc/nginx/nginx.conf
/var/lib/docker/aufs/diff/c7b6b87cfda72701229eebca868eb047aa01c255b62e56ad223dc75396c584e4/etc/nginx/nginx.conf
/var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456/etc/nginx/nginx.conf
3、进入对应容器id的目录,修改问题文件
root@ubuntu:cd /var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456
执行ls命令,容器的根目录展现在面前,是不是很熟悉?
root@ubuntu:/var/lib/docker/aufs/diff/fa02f8084b631c371c6c050e5f0315017d327f84746b064246803a6a90a39456#ls
etc root run srv tmp usr var
接下来找到这个容器里面nginx.conf的语法错误处修改。
4、修改后启动容器
root@ubuntu:~# docker start iframe-test
root@ubuntu:~# docker ps |grep iframe-test
fa02f8084b63 debian06-base:latest "/etc/rc.local" 6 weeks ago Up 13 minutes 10.18.103.2:22->22/tcp,10.18.103.2:80->80/tcp, 10.18.103.2:443->443/tcp,10.18.103.2:3306->3306/tcp, 10.18.103.2:6379->6379/tcp,10.18.103.2:6381->6381/tcp, 10.18.103.2:8000->8000/tcp,10.18.103.2:8888->8888/tcp iframe-test
容器启动成功,问题解决。以后再也不用担心docker容器坏掉,导致数据丢失了。
我的其它docker相关文章:
运维人员的解放----Docker快速部署
http://yangrong.blog.51cto.com/6945369/1551327
docker容器端口IP规划及端口动态扩容
相关推荐
使用k8s内置健康检查机制,更快速的发现故障容器并自动恢复,解决以往项目多点部署监控覆盖不全面(自动化)问题; 使用Kubernetes和容器来替代在物理机中运行的KVM 虚机,提高资源利用率,解决虚机创建、迁移、扩...
本文介绍了docker swarm 集群故障与异常详解,分享给大家,具体如下: 在上次遭遇 docker swarm 集群故障后,我们将 docker 由 17.10.0-ce 升级为最新稳定版 docker 17.12.0-ce 。 前天晚上22:00之后集群中的2个...
在Amazon Web Services基础架构中使用CellProfiler运行封装的Docker容器。 此代码是如何使用AWS分布式基础架构来运行CellProfiler的示例。 AWS资源的配置是使用boto3和awscli完成的。 该工作程序是用Python编写的...
有关Keepalived的更多详细信息,可以在该项目的网站上找到,网址为 该Docker构建基于Ubuntu映像之上,以提供一个可以正常工作的Keepalived实例,该实例可以与多个类似的容器配对以分发VIP。 在最基本的用法下,您将...
*Padis平台是平安科技研发的基于docker容器 技术实现的分布式PaaS平台。 *平台底层以Mesos+Marathon框架来实现容器 应用的创建运行、快速缩容扩容、故障自愈。 *平台自创容器动态独立IP功能,满足平台上 面每个实例...
这是Dockerized Zend Server容器的启用群集的版本。...从Docker-Hub启动容器 Zend Server在作为php-zendserver共享。 要启动一个Zend Server实例,请执行: $ docker run php-zendserver 您可以通过在'docker r
注意,如果您挂载文件夹而不是复制文件夹,请注意,在某些平台上,Docker无法挂载本地文件夹。 在这种情况下,请使用 ! 访问实例 http:// [go-server-ip]:8153 关掉 docker-compose stop 或通过以下方式销毁: ...
例如,此命令将启动运行Simian Army的Docker容器,并指示Chaos Monkey考虑给定AWS账户中的所有自动伸缩组(ASG)以终止: docker run -d \ -e SIMIANARMY_CLIENT_AWS_ACCOUNTKEY= $AWS_ACCESS_KEY_ID \ -e ...
对于蘑菇街而言,每年的11.11已经成为一年中最大的考验,考验的是系统稳定性,容灾能力,紧急故障处理,运维等各个方面的能力。蘑菇街的私有云平台,从无到有,已经经过了近一年的发展,生产环境上经历了3次大促,...
Marathon也用作元框架:您可以使用它启动其他Mesos框架,例如Chronos或 ,以确保它们在机器故障中幸免。 它可以启动任何可以在标准外壳中启动的东西。 实际上,您甚至可以通过Marathon启动其他Marathon实例。 特征 ...
节点中的这些无状态服务实例会通过向apiserver中的Endpoint加锁的方式来进行leader election, 当目前拿到leader的实例无法正常工作时,别的实例会拿到锁,变为新的leader。 目前在多个Master节点上采用static pod...
./start.sh构建并启动2个MySQL Docker容器。 一位主人,一位奴隶。 docker logs -f mysql-master等待主MySQL实例完成初始化。 ./setup.sh设置主从关系,添加数据,并进行基本的查询测试。 ./failover.sh启动交互...
该存储库托管创建新的docker容器所需的文件,该容器设置了用于SoCaTel数据存储目的而访问的flask应用程序。 这些当前包括将服务,组织,用户和组(一次一个)存储到GraphDB和ES中。 如果任何一个发生故障,事务都会...
好处无需维护索引:每个服务器都可以启动和死亡而无需在某个地方注册容错:如果服务器暂时无法访问(例如,网络问题),则消息不会丢失:恢复后,所有丢失的消息都会重新播放。 可扩展:处理1或2
借助 Docker 上的 Zend Server,您将在高度可用的 PHP 生产环境中启动并运行 PHP 应用程序,其中包括高度可靠的 PHP 堆栈、应用程序监控、故障排除和创新的新技术 - Z -射线。 Z-Ray 通过在工具栏中跟踪和显示有关...
Amazon ECS中的Rabbitmq自动群集(EC2容器服务) 基于AWS Auto Scaling组成员资格的Amazon EC2 Container Service中的Rabbitmq集群自动化。 这已经在中小型...每个ECS实例仅运行一个Rabbitmq容器,并部署奇数个R
它创建启用了数据复制的PostgreSql服务器集群:创建一个主PostgreSql容器和多个副本PostgreSql容器,并将主数据库实时复制到副本容器。 它管理故障转移:如果主PostgreSql崩溃,它将自动将副本PostgreSql提升为主...
在API容器方面提供冗余:如果容器发生故障,传入的请求将被重定向到另一个正在运行的实例。 容器之间的协调:Swarm将在API之间进行协调,并选择其中一个以监听传入的请求。 扩展推理服务,以便获得更快的预测,...
在API容器方面提供冗余:如果容器发生故障,传入的请求将被重定向到另一个正在运行的实例。 容器之间的协调:Swarm将在API之间进行协调,并选择其中一个以监听传入的请求。 扩展推理服务,以便获得更快的预测,...
在API容器方面提供冗余:如果容器发生故障,传入的请求将被重定向到另一个正在运行的实例。 容器之间的协调:Swarm将在API之间进行协调,并选择其中一个以监听传入的请求。 扩展推理服务,以便获得更快的预测,...