我们正在运行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安装的版本。如果我确实想要一个新版本我将如何安装(抱歉,如果这是一个愚蠢的问题,我不是一个系统管理员)。
谷歌搜索,我在Red Hat网站上发现了这一点“Red Hat不建议在任何RHEL 6版本上运行任何版本的Docker。”我们已经在RHEL 6上运行了几年的docker,所以这让我很困惑。升级到RHEL 7现在不是我们真正的选择。
任何人都可以对这些问题有所了解吗?我们需要docker才能可靠地工作而不必经常重启。
答案 0 :(得分:1)
根据今天的标准,Docker 1.7.1真的很老了。从那时起,已经修复了数百个错误,驱动程序堆栈的增强,安全补丁以及版本中添加的有价值的功能。看起来您的存储堆栈存在问题,并且很有可能在新版本中修复此问题。
Docker已经声明,yum
和apt
等包管理系统中的默认版本可能已过时,您应该使用他们的仓库。最好的方法是将他们的Yum repo信息添加到您的系统中,以便您可以像其他软件包一样安装它。说明如下:Installation on Red Hat Enterprise Linux。
注意:这将允许您安装Docker,该服务将被称为docker
,但包是docker-engine
。这让过去的一些人感到困惑。
yum install docker-engine
Docker还提供了一个脚本,可以简化操作(以admin / root身份运行):
curl -fsSL https://get.docker.com/ | sh
答案 1 :(得分:1)
不要使用基于RHEL6的系统。
RHEL6使用带有反向移植修复的2.6内核来保持Docker的正常运行。 Docker通常需要3.10+内核。来自v1.8的Docker dropped support for RHEL6因此不太可能会有更多的软件包。
如果必须使用RHEL6 don't use the default loopback devicemapper进行存储。设置LVM精简池以供Docker使用。