Docker挂起需要重启

我们运行Docker 1.7.1,在RHEL 6.7上构build786b29d。 最近我们有多次Docker守护进程被locking,我们不得不重新启动机器才能恢复。

一个典型的情况是一个运行良好的容器数周突然开始抛出错误。 有时我们可以重新启动容器,一切都很好。 但是有时候所有的docker命令都会挂起,并且重启守护进程失败,我在ps:

4 Z root 4895 1 0 80 0 - 0 exit Aug23 ? 00:01:24 [docker] 

在系统日志中我看到了这个:

 device-mapper: ioctl: unable to remove open device docker-253:6-1048578-317bb6ad40cded3fbfd752d95551861c2e4ef08dffc1186853fea0e85da6b12b INFO: task docker:16676 blocked for more than 120 seconds. Not tainted 2.6.32-573.12.1.el6.x86_64 #1 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. docker D 000000000000000b 0 16676 1 0x00000080 ffff88035ef13ea8 0000000000000082 ffff88035ef13e70 ffff88035ef13e6c ffff88035ef13e28 ffff88062fc29a00 0000376c85170937 ffff8800283759c0 0000000000000400 00000001039d40c7 ffff8803000445f8 ffff88035ef13fd8 Call Trace: [] _mutexlock_slowpath+0x96/0x210 [] ? wake_up_process+0x15/0x20 [] mutex_lock+0x2b/0x50 [] sync_filesystems+0x26/0x150 [] sys_sync+0x17/0x40 [] system_call_fastpath+0x16/0x1b 

最新的docker版本是1.12.1,我们在1.7.1。 可以或者应该安装一个新版本? 1.7.1是yum安装的版本。 如果我确实想要一个新版本,我将如何安装(如果这是一个愚蠢的问题,我不是一个系统pipe理员)。

我在Google上find了一个“红帽不推荐在任何RHEL 6版本上运行任何版本的Docker”的文章。 我们已经在RHEL 6上运行Docker几年了,所以这让我感到困惑。 现在升级到RHEL 7并不是我们的select。

任何人都可以解释这些问题? 我们需要docker工作可靠,而不必经常重新启动。

按照今天的标准,Docker 1.7.1已经很老了。 已经修复了数百个错误,增强了驱动程序堆栈,安全修补程序以及版本中添加的有价值的function。 它看起来像是你的存储堆栈有问题,并有一个很好的机会,这是固定在一个新的版本。

Docker已经声明,像yumapt这样的包pipe理系统中的默认版本可能会过时,并且您应该使用它们的repo。 最好的方法是将Yum回购信息添加到系统中,以便像其他软件包一样安装它。 说明如下: 在Red Hat Enterprise Linux上安装 。

注意:这将允许你安装Docker,这个服务将被称为docker ,但是这个包是docker-engine 。 这让过去一些人感到困惑。

 yum install docker-engine 

Docker还提供了一个脚本来实现这一点(以admin / root身份运行):

 curl -fsSL https://get.docker.com/ | sh 

不要使用基于RHEL6的系统。

RHEL6使用2.6内核和backported修复来保持Docker的工作。 Docker通常需要3.10+的内核。 Docker从v1.8中删除了对RHEL6的支持,所以不太可能会有更多的软件包。

如果您必须使用RHEL6, 请不要使用默认环回设备映射程序进行存储。 设置一个LVM精简池供Docker使用。