有一台机器没有如往常一样起来,该服务器是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规划及端口动态扩容
相关推荐
本文档旨在探讨一种高效的云平台建设方法,该方法基于微服务架构和Docker容器技术,旨在为开发团队提供一套完整的服务快速开发、部署、运维管理以及持续集成与持续交付(CI/CD)的解决方案。该PaaS(Platform as a ...
**Docker Swarm** 是 Docker 平台自带的一种容器编排解决方案,旨在为用户提供简单易用的容器集群管理功能。通过 Swarm,用户可以轻松地将多台物理服务器或虚拟机组合成一个虚拟的 Docker 主机集群。 ##### 示例:...
企业Docker容器云方案是一种创新的技术解决方案,旨在解决传统IT架构中的诸多问题,如硬件采购周期长、资源利用率低、运维复杂以及扩容速度慢等。Docker作为一种轻量级的容器技术,因其高性能、快速部署和高稳定性而...
58同城的Docker容器云平台演进是其IT架构线为解决一系列问题而进行的技术升级。在容器技术应用前,58同城面临了几个主要挑战:一是资源分配不合理,不同业务场景对资源需求差异大,导致资源利用率低下;二是线上服务...
【58同城Docker容器云平台演进】的分享展示了58同城如何通过引入Docker容器技术解决资源利用率低、混合部署交叉影响、扩缩容效率低、代码环境不一致以及缺乏稳定测试环境等问题。他们构建了一套私有云平台,以提升...
- **轻量级虚拟化**:Docker容器不模拟硬件,而是基于主机操作系统内核,这使得它们启动快速,占用资源少,相比虚拟机更高效。 - **资源隔离**:每个容器都运行在一个独立的环境中,确保应用之间的隔离,避免了...
5. **故障检测与切换**:一旦主节点因某种原因无法提供服务,MHA Manager会检测到并执行预定义的故障切换策略,将一个从节点提升为主节点,同时其他从节点会重新配置以复制新的主节点。 【维护与扩展】 使用Docker ...
使用 Docker 镜像可以生成 Docker 容器,Docker 容器是运行 Docker 镜像的实例。UWB 项目 Docker 部署使用了 Docker 容器部署,该部署环境包括云上主机对应的 SSH 地址 10.21.0.16、本机 10.21.128.2 和局域网机器 ...
通过 Docker,可以轻松地在单机或集群中部署多个 Zookeeper 实例,实现高可用性和故障恢复。每个 Zookeeper 实例都可以被封装在一个 Docker 容器中,容器之间的网络通信则依赖于 Docker 的网络模型,这正是 iptables...
若发现容器故障,可以立即自动启动新的容器来替换故障容器,从而达到自动容错的目的。 文件【部分内容】中提到的一些关键技术和实践,也是实现上述目标的重要组成部分。例如,提到的“Registrator”是Docker的一个...
本文介绍了docker swarm 集群故障与异常详解,分享给大家,具体如下: 在上次遭遇 docker swarm 集群故障后,我们将 docker 由 17.10.0-ce 升级为最新稳定版 docker 17.12.0-ce 。 前天晚上22:00之后集群中的2个...
描述中提到的"用于将查询记录到stdout",意味着这个Docker容器内的PostgreSQL实例配置了特殊的日志策略,将通常写入日志文件的查询日志信息重定向到了stdout。这样,通过Docker的logging driver,我们可以方便地收集...
在IT领域,Docker Swarm是Docker公司推出的一款容器编排工具,用于管理和调度Docker容器集群。这个名为"Docker Swarm 管理资源.rar"的压缩包很可能包含了一系列关于如何使用Docker Swarm进行资源管理的教程、文档、...
服务定义了如何创建和维护一组任务(task),每个任务都是一个运行中的Docker容器实例。服务还支持负载均衡、自动故障恢复和自动扩展,使得在分布式系统中部署和管理应用变得更加简单。 3. Docker Compose: Docker ...
- **网络通信**:Docker容器之间需要能够相互通信,可以通过使用用户自定义网络来实现。 - **持久化**:为了防止数据丢失,应启用Redis的RDB或AOF持久化机制,确保在容器重启后数据仍然可用。 - **安全策略**:虽然...
Docker容器运行在Docker引擎上,它们轻量级且独立,使得部署和扩展应用变得极其简单。 接下来,我们进入Redis主从复制的讨论。Redis主从复制是一种数据备份策略,其中一个节点(主节点)负责处理写操作,而其他节点...
使用k8s内置健康检查机制,更快速的发现故障容器并自动恢复,解决以往项目多点部署监控覆盖不全面(自动化)问题; 使用Kubernetes和容器来替代在物理机中运行的KVM 虚机,提高资源利用率,解决虚机创建、迁移、扩...