Docker挂起,需要重新启动



我们正在运行docker 1.7.1,在RHEL 6.7上构建786b29d。最近我们有很多次当docker守护进程锁定时,我们不得不重新启动机器来恢复它。

一个典型的场景是,一个容器已经正常运行了几个星期,突然开始抛出错误。有时我们可以重新启动容器,一切正常。但其他时候,所有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安装的版本。如果我确实想要一个新版本,我该如何安装它(抱歉,如果这是一个愚蠢的问题,我不是系统管理员)。

在谷歌上,我在一个红帽网站上找到了"红帽不建议在任何RHEL 6发行版上运行任何版本的Docker。"我们已经在RHEL 6上运行docker好几年了,所以这让我很困惑。升级到RHEL 7现在对我们来说不是一个真正的选择。 谁能解释一下这个问题?我们需要docker能够可靠地工作,而不需要经常重启。

按照今天的标准,Docker 1.7.1真的很老了。从那时起,已经修复了数百个错误,增强了驱动程序堆栈,添加了安全补丁和有价值的特性。看起来您的存储堆栈有问题,并且很有可能在较新的版本中修复此问题。

Docker已经声明,像yumapt这样的包管理系统的默认版本可能已经过时了,你应该使用它们的repo。最好的方法是将它们的Yum repo信息添加到您的系统中,这样您就可以像安装其他包一样安装它。说明如下:在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内核和反向移植修复来保持Docker工作。Docker通常需要3.10+内核。Docker从v1.8开始就放弃了对RHEL6的支持,所以不太可能会有更多的包来支持它。

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

最新更新