【问题标题】:Docker hanging requiring rebootDocker挂起需要重启
【发布时间】:2017-01-04 19:31:26
【问题描述】:

我们正在运行 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 能够可靠地工作,而不必经常重启。

【问题讨论】:

    标签: docker rhel rhel6


    【解决方案1】:

    按照今天的标准,Docker 1.7.1 已经过时了。自那以后的版本中修复了数百个错误、增强了驱动程序堆栈、安全补丁和有价值的功能。看起来您的存储堆栈存在问题,并且很有可能在较新的版本中得到修复。

    Docker 表示包管理系统中的默认版本,如 yumapt 可能已经过时了,你应该使用他们的 repo。最好的方法是将他们的 Yum 存储库信息添加到您的系统中,这样您就可以像安装其他软件包一样安装它。说明在这里:Installation on Red Hat Enterprise Linux

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

    yum install docker-engine
    

    Docker 还提供了一个脚本来简化操作(以管理员/root 身份运行):

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

    【讨论】:

    【解决方案2】:

    不要使用基于 RHEL6 的系统。

    RHEL6 使用带有反向移植修复程序的 2.6 内核来保持 Docker 正常工作。 Docker 通常需要 3.10+ 内核。 Docker dropped support for RHEL6 从 v1.8 开始,所以不太可能有更多的包。

    如果您必须使用 RHEL6,don't use the default loopback devicemapper 进行存储。设置 LVM 精简池供 Docker 使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2015-09-06
      • 2023-03-25
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      相关资源
      最近更新 更多