" chfn:PAM:系统错误"在Docker Hub构建中间歇性地进行

时间:2014-08-07 22:15:15

标签: github docker

偶尔,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。有没有办法解决这个问题?

4 个答案:

答案 0 :(得分:8)

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

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

后续构建应该会成功。

答案 1 :(得分:7)

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

最近更新了内核以允许容器发送审计事件,但是他们需要CAP_AUDIT_WRITE才能编写审计事件。 (git-bisect是used to track this bug down

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

可能的解决方案:

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

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

  3. 通过将其/usr/bin/chfn/bin/true

  4. 关联来停用ln -s -f /bin/true /usr/bin/chfn

答案 2 :(得分:0)

我有同样的错误

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

在我的mysql-server vagrant框中执行trusty64安装时。我首先尝试安装mysql-server-5.6,但安装被绞死,不得不重置机器。比我尝试了默认的mysql版本,但得到了上面的错误。

最终摧毁了虚拟机并创建了一个全新的虚拟机。

答案 3 :(得分:0)

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

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

通过在我的Dockerfile中添加以下内容,HTOK的解决方案非常完美:

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