有时,Docker Hub上的自动构建会因PAM系统错误而失败,如下所示,这些错误来自两个独立的构建:
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
有趣的是,这种失败只是间歇性地发生并且使用相同的Dockerfiles.有没有办法解决?
有一个解决方法!这是一个简单的修复,似乎没有任何负面影响.将以下符号链接添加到Dockerfile的顶部:
RUN ln -s -f /bin/true /usr/bin/chfn
后续构建应该成功.
这是最近一些内核更新的结果(参见Github问题#6345)
最近更新了内核以允许容器发送审计事件,但是他们需要CAP_AUDIT_WRITE才能编写审计事件.(git-bisect 用于跟踪这个错误
之前,PAM检测到审核不可用/禁用(非致命错误).现在它可用,PAM检测到审计系统并尝试使用它,但无法编写审计事件(致命错误).
可能的解决方案:
允许容器具有CAP_AUDIT_WRITE(GitHub问题表明这将是默认设置),但DockerHub不允许其在构建系统中授予此功能.
禁用PAM中的审核支持.有人发布了CentOS 6.5和Ubuntu 14.04的docker镜像来重建PAM并禁用审计.有关如何重建PAM的基本知识,您可以查看CentOS和Ubuntu的相关Dockerfiles )
/usr/bin/chfn
通过链接到/bin/true
(ln -s -f /bin/true /usr/bin/chfn
)禁用