在Docker Hub构建中,出现"chfn: PAM: System Error"错误信息

7

有时候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

有趣的是,这种失败情况只会间歇性地出现,并且使用相同的Dockerfile。有什么好的解决方法吗?
4个回答

10

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

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

后续构建应该会成功。


除非您要实际更改系统用户的指纹信息,例如为了确保来自ssmtp邮件用户的电子邮件与运行在容器中的站点名称匹配。 - Routhinator

9

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

内核最近进行了更新,以允许容器发送审计事件,但它们需要CAP_AUDIT_WRITE才能写入审计事件。(使用git-bisect 追踪此错误)

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

可能的解决方案:

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

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

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


0

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

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

HTOK 的解决方案非常完美,只需将以下内容添加到我的 Dockerfile 中:

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

0

我遇到了同样的错误

/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 版本,但出现了上述错误。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接