“chfn:PAM:系统错误”间歇性地在Docker Hub构build中

Docker Hub上的偶尔自动构build失败,出现如下的PAM系统错误,这些错误来自两个独立的构build:

Preparing to unpack .../mysql-server-5.5_5.5.38-0ubuntu0.14.04.1_amd64.deb ... [91mchfn: PAM: System error [0m [91madduser: '/usr/bin/chfn -f MySQL Server mysql' returned error code 1. Exiting. [0m [91mdpkg: error processing archive /var/cache/apt/archives/mysql-server-5.5_5.5.38-0ubuntu0.14.04.1_amd64.deb (--unpack): subprocess new pre-installation script returned error exit status 1 [0m Preparing to unpack .../redis-server_2%3a2.8.4-2_amd64.deb ... [91mchfn: PAM: System error [0m [91madduser: '/usr/bin/chfn -f redis server redis' returned error code 1. Exiting. [0m [91mdpkg: error processing archive /var/cache/apt/archives/redis-server_2%3a2.8.4-2_amd64.deb (--unpack): subprocess new pre-installation script returned error exit status 1 [0m 

有趣的是,这种失败只是间歇性地发生,并且具有相同的Docker文件。 有没有办法解决?

这是最近一些内核更新的结果(参见Github Issue#6345 )

内核最近被更新为允许容器发送审计事件,但是他们需要CAP_AUDIT_WRITE来写一个审计事件。 (git-bisect被用来跟踪这个错误

之前,PAM检测到审计不可用/不可用(非致命错误)。 现在,它可用,PAM检测审计系统,并尝试使用它,但没有写审计事件(致命错误)。

可能的解决scheme:

  1. 允许容器具有CAP_AUDIT_WRITE(GitHub问题表明这将是默认设置),但是DockerHub不允许在构build系统中授予此function。

  2. 禁用PAM中的审计支持。 有人发布了用于CentOS 6.5和Ubuntu 14.04的docker镜像来重buildPAM并禁用审计。 有关如何重buildPAM的基本知识,可以查看CentOS和Ubuntu的相关Dockerfiles)

  3. 通过将/usr/bin/chfn链接到/bin/true来禁用/usr/bin/chfnln -s -f /bin/true /usr/bin/chfn

有一个解决方法! 这是一个简单的修复,并没有任何负面影响。 将以下符号链接添加到Dockerfile的顶部:

RUN ln -s -f /bin/true /usr/bin/chfn

随后的构build应该成功。

我有同样的错误

 /var/cache/apt/archives/mysql-server-5.5_5.5.38-0ubuntu0.14.04.1_amd64.deb 

当在我的vagrant trusty64盒子上执行mysql-server的安装。 我第一次尝试安装mysql-server-5.6但挂起的安装,不得不重置机器。 比我试图默认的MySQL版本,但得到了上述错误。

最终破坏了虚拟机并创build了一个全新的虚拟机。

我在使用net = host设置的samba容器中也遇到同样的问题,并使用bash脚本来创build具有指定uid的用户(以匹配主机),例如

 sudo adduser --no-create-home --uid 1000 --gecos "" --ingroup mysambagroup --disabled-password --disabled-login myusername 

HTOK的解决scheme只需将以下内容添加到我的Dockerfile中即可完美实现:

 RUN ln -s -f /bin/true /usr/bin/chfn