“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:
-
允许容器具有CAP_AUDIT_WRITE(GitHub问题表明这将是默认设置),但是DockerHub不允许在构build系统中授予此function。
-
禁用PAM中的审计支持。 有人发布了用于CentOS 6.5和Ubuntu 14.04的docker镜像来重buildPAM并禁用审计。 有关如何重buildPAM的基本知识,可以查看CentOS和Ubuntu的相关Dockerfiles)
-
通过将
/usr/bin/chfn
链接到/bin/true
来禁用/usr/bin/chfn
(ln -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