You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Linux 2上两阶段构建带curl的Keycloak镜像时dnf挂起

问题:Keycloak两阶段镜像构建时dnf挂起在glibc脚本执行环节

执行包含curl的Keycloak两阶段镜像构建时,dnf在运行running scriplet glibc-2.34-125.el9_5.3.x86_64环节挂起。该构建在Windows机器上可正常运行,但在AWS Linux 2服务器上失败,更换多台AWS服务器均出现此问题,寻求排查建议。

背景说明

Keycloak官方镜像极度精简,移除了yum、microdnf、dnf、rpm等包管理器以缩小攻击面。官方推荐采用两阶段构建,在干净rootfs中安装所需工具后复制到最终镜像,本次构建的上半部分直接沿用官方推荐配置,Dockerfile如下:

# create builder image with curl properly installed
FROM registry.access.redhat.com/ubi9 AS ubi-micro-build
RUN mkdir -p /mnt/rootfs
RUN dnf clean all  # troubleshooting step
RUN dnf upgrade # troubleshooting step
RUN dnf install --installroot /mnt/rootfs curl --releasever 9 --setopt install_weak_deps=false --nodocs -y && \
    dnf --installroot /mnt/rootfs clean all && \
    rpm --root /mnt/rootfs -e --nodeps setup

# starting with base keycloak image
FROM quay.io/keycloak/keycloak:26.1
# copy from build image to custom image
USER root
COPY --from=ubi-micro-build /mnt/rootfs /

# continue with snc specific files
USER 1000

RUN mkdir /opt/keycloak/data/import
COPY snc-export.json /opt/keycloak/data/import

排查建议

  • 检查AWS Linux 2服务器的Docker版本:Windows和AWS上的Docker版本差异可能导致构建行为不同,尝试升级AWS服务器上的Docker到最新稳定版。
  • 禁用glibc脚本执行:在dnf install命令中添加--setopt=tsflags=noscripts参数,跳过rpm脚本执行,避免脚本挂起(适用于不需要glibc初始化脚本的场景)。
  • 更换构建基础镜像:尝试使用ubi9-minimal替代ubi9作为构建阶段的基础镜像,精简镜像可能减少脚本执行环节的冲突。
  • 增加构建日志详细度:修改dnf命令添加-v参数,获取更详细的日志输出,定位挂起的具体原因。
  • 检查AWS服务器资源:确认服务器的CPU、内存是否足够,dnf安装glibc时可能需要一定资源,资源不足会导致挂起。
  • 手动执行脚本排查:进入ubi9镜像,手动挂载/mnt/rootfs并执行glibc的rpm脚本,复现挂起场景以定位问题。

内容的提问来源于stack exchange,提问作者Timothy Vogel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:03:11