【问题标题】:Docker fails with Sub-process /usr/bin/dpkg returned an error code (1)Docker 失败,子进程 /usr/bin/dpkg 返回错误代码 (1)
【发布时间】:2020-01-29 07:37:33
【问题描述】:

我在尝试将 JRE 安装到我的 docker 容器时遇到问题。

我不断收到错误消息;

Processing triggers for libc-bin (2.28-10) ...
Processing triggers for systemd (241-7~deb10u1) ...
Processing triggers for ca-certificates (20190110) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
Processing triggers for libgdk-pixbuf2.0-0:amd64 (2.38.1+dfsg-1) ...
Errors were encountered while processing:
 openjdk-11-jre-headless:amd64
 openjdk-11-jre:amd64
 default-jre
E: Sub-process /usr/bin/dpkg returned an error code (1)

如果我稍微向上滚动一下构建输出,我还会看到以下问题;

Setting up default-jre-headless (2:1.11-71) ...
Setting up openjdk-11-jre-headless:amd64 (11.0.4+11-1~deb10u1) ...
update-alternatives: using /usr/lib/jvm/java-11-openjdk-amd64/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode
update-alternatives: error: error creating symbolic link '/usr/share/man/man1/rmid.1.gz.dpkg-tmp': No such file or directory
dpkg: error processing package openjdk-11-jre-headless:amd64 (--configure):
 installed openjdk-11-jre-headless:amd64 package post-installation script subprocess returned error exit status 2
dpkg: dependency problems prevent configuration of openjdk-11-jre:amd64:
 openjdk-11-jre:amd64 depends on openjdk-11-jre-headless (= 11.0.4+11-1~deb10u1); however:
  Package openjdk-11-jre-headless:amd64 is not configured yet.

dpkg: error processing package openjdk-11-jre:amd64 (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of default-jre:
 default-jre depends on openjdk-11-jre; however:
  Package openjdk-11-jre:amd64 is not configured yet.

dpkg: error processing package default-jre (--configure):
 dependency problems - leaving unconfigured
Setting up ca-certificates-java (20190405) ...
head: cannot open '/etc/ssl/certs/java/cacerts' for reading: No such file or directory

我的 Dockerfile 很简单,但它就是行不通

FROM nginx:latest

RUN apt-get update -y && apt-get install -y \
    unzip \
    wget \
    default-jre \
    nginx

它看起来正在使用debian buster,任何帮助使它工作将不胜感激。我已经尝试了好几天了。

【问题讨论】:

    标签: java docker debian


    【解决方案1】:

    jre 安装需要man 文件夹存在于服务器上,试试这个:

    FROM nginx:latest
    
    RUN mkdir -p /usr/share/man/man1
    
    RUN apt-get update -y && apt-get install -y \
        unzip \
        wget \
        default-jre \
        nginx
    

    【讨论】:

    • 为什么在使用 nginx 镜像时要通过 apt 安装 nginx?
    • 我不是,但 OP 有,我只指出如何解决问题,也许他有他的理由....
    • @LinPy ...我似乎遇到了另一个错误WARNING: Illegal reflective access by com.install4j.runtime.util.ToolTipHelpLabel ...你会碰巧知道这个吗?
    【解决方案2】:

    以下是有关此问题的一些背景信息。发生这种情况是因为安装后脚本尝试为 java 运行 update-alternatives 并且文件夹 /usr/share/man/man1 不存在,正如 LinPy 的答案中已经解释的那样。

    以下 Debian 错误更详细地讨论了此问题,并通过创建它们的 issing 文件夹记录了解决方法: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199#23

    OpenJDK 8 似乎最近关闭了这个问题,但它似乎在较新的 JDK 中仍然存在,请参阅:

    https://salsa.debian.org/openjdk-team/openjdk/-/blob/master/debian/JB-jdk-headless.postinst.in

    以下补丁可以解决此问题,并且可能也应该添加到较新的 OpenJDK 版本中:

    diff --git a/debian/JB-jdk-headless.postinst.in b/debian/JB-jdk-headless.postinst.in
    index 0e1ef5f..e3afef1 100644
    --- a/debian/JB-jdk-headless.postinst.in
    +++ b/debian/JB-jdk-headless.postinst.in
    @@ -43,6 +43,7 @@ configure)
         if [ -n "$multiarch" ] && [ "$DPKG_MAINTSCRIPT_ARCH" != $(dpkg --print-architecture) ]; then
            priority=$(expr $priority - 1)
         fi
    +    test -d /usr/share/man/man1 || mkdir -p /usr/share/man/man1
         for i in $jdk_hl_tools; do
            unset slave1 slave2 || true
             if [ -e $mandir/man1/$i.$srcext ]; then
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2022-07-17
      • 1970-01-01
      • 2020-02-10
      相关资源
      最近更新 更多