偶尔,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。有没有办法解决这个问题?
答案 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检测到审计系统并尝试使用它,但无法编写审计事件(致命错误)。
可能的解决方案:
允许容器具有CAP_AUDIT_WRITE(GitHub问题表明这将是默认设置),但DockerHub不允许在其构建系统中授予此功能。
禁用PAM中的审核支持。有人发布了docker image用于CentOS 6.5和Ubuntu 14.04来重建PAM并禁用审计。有关如何重建PAM的基本知识,您可以查看相关的Dockerfiles CentOS和Ubuntu)
通过将其/usr/bin/chfn
(/bin/true
)
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