Tag: linux kernel

无法终止进程(源自docker容器)

我运行一个有几千个容器的Docker集群,每天随机运行几次,我有一个进程阻塞容器停止。 下面是一个示例容器,其相应的过程和所有我试图杀死容器/进程的东西。 容器: # docker ps | grep 950677e2317f 950677e2317f 7e553d1d9f6f "/bin/sh -c /minecraf" 2 days ago Up 2 days 0.0.0.0:22661->22661/tcp, 0.0.0.0:22661->22661/udp, 0.0.0.0:37681->37681/tcp, 0.0.0.0:37681->37681/udp gloomy_jennings 尝试使用docker守护进程停止容器(它会永远尝试没有结果): # time docker stop –time=1 950677e2317f ^C real 0m13.508s user 0m0.036s sys 0m0.008s 守护进程尝试停止时logging日志: # journalctl -fu docker.service — Logs begin at Fri 2015-12-11 15:40:55 CET. — Dec 31 […]

Docker和PaX主机

我花了几天的时间试图让Docker容器在Gentoo Hardened上正常运行。 我花了数天才发现的第一个问题是由我自己的偏执狂所驱动的:我放置Docker根的分区挂载了nosuid和noexec。 因此,devicemapper驱动程序对它进行了处理,因为它创build了许多循环设备来完成它的工作,但覆盖驱动程序没有,因为它inheritance了顶部的noexec标志,所以容器中的可执行文件将不会运行。 我只是留下这个知识让别人来发现这里… 然而,那样的话,我绊倒了另外一个问题:PaX标志。 PaX强制要求创build包含代码的新内存页面的可执行文件需要使用特殊的ELF头文件或扩展的文件系统属性(最好是两者)来标记,因为推荐的Gentoo设置是使用扩展属性并忽略ELF头文件。 那些不合规的可执行文件在他们尝试的时候就会被杀死。 不幸的是,只需要尝试的程序列表包括nodejs,python,以及几乎所有其他现代的解释器,更不用说mongodb了。 可能还有其他问题的可执行文件,但这些是主要的元凶,也是你经常想要在容器中看到的东西。 更不幸的是,尽pipedocker图像应该能够包含由扩展属性标记的文件,但是对于需要这种标记的通用软件(特别是mongodb和nodejs)来说,没有一个官方图像似乎具有这些标记。 目前,我一直在解决这个问题,将实际的文件放在磁盘上,并从容器外面设置它的xattr。 这显然是一个非常糟糕的主意。 解决这个问题的正确方法是什么?就这一点而言,似乎没有其他人似乎有一个特别的理由,正如大量的Googlesearch似乎表明的那样? 是否有,也许,我错过了另一个内核选项,(我倾向于这么做)或一个特定的推荐方式来设置它们,使其保持安全,实际上工作? 除了closuresPaX,就是。