본문 바로가기
관리자

Programming-[Backend]/Keycloak

keycloak v26.1.2 image build issue( w/ Docker engine 28.x.x)

728x90
반응형

 

배경

keycloak을 26.0.1 버전을 사용하다가, 26.1.2 버전으로 업그레이드 하면서 Docker image build 관련 이슈가 발생했다. 아래 코드처럼 Dockerfile을 작성하였는데 이미지 빌드까지는 잘 되는데 Runtime에 에러가 발생했다.

 

 

Dockerfile 예시

ARG AWS_ECR_REPOSITORY_FE_URI
FROM ${AWS_ECR_REPOSITORY_FE_URI}:latest AS base

FROM quay.io/keycloak/keycloak:26.2.1 AS builder
WORKDIR /opt/keycloak

ENV KC_HEALTH_ENABLED=${KC_HEALTH_ENABLED:-true} \
    KC_METRICS_ENABLED=${KC_METRICS_ENABLED:-true} \
    KC_DB=${KC_DB:-postgres} \
    KC_PROXY_HEADERS=${KC_PROXY_HEADERS:-xforwarded} \
    KC_CACHE_STACK=${KC_CACHE_STACK:-kubernetes} \
    KC_HOSTNAME_BACKCHANNEL_DYNAMIC=${KC_HOSTNAME_BACKCHANNEL_DYNAMIC:-true} \
    KC_FEATURES=${KC_FEATURES:-admin-fine-grained-authz} \
    JAVA_OPTS_APPEND=${JAVA_OPTS_APPEND}

COPY --from=base /opt/keycloak/providers/ /opt/keycloak/providers/
ADD --chown=keycloak:keycloak --chmod=644 keycloak-providers/ /opt/keycloak/providers/
# 이부분
RUN touch -m --date=@1743465600 /opt/keycloak/providers/*
# 이부분


RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:26.2.1
COPY --from=builder /opt/keycloak /opt/keycloak
ENV KC_DB=${KC_DB:-postgres} \
    KC_FEATURES=${KC_FEATURES:-admin-fine-grained-authz} \
    KC_HEALTH_ENABLED=${KC_HEALTH_ENABLED:-true} \
    KC_METRICS_ENABLED=${KC_METRICS_ENABLED:-true} \
    KC_DB_URL_PORT=${KC_DB_URL_PORT} \
    KC_DB_URL_DATABASE=${KC_DB_URL_DATABASE} \
    KC_DB_URL_USERNAME=${KC_DB_URL_USERNAME} \
    KC_DB_URL_PASSWORD=${KC_DB_URL_PASSWORD} \
    KC_BOOTSTRAP_ADMIN_USERNAME=${KC_BOOTSTRAP_ADMIN_USERNAME} \
    KC_BOOTSTRAP_ADMIN_PASSWORD=${KC_BOOTSTRAP_ADMIN_PASSWORD} \
    KC_LOG_LEVEL=${KC_LOG_LEVEL:-WARN}

COPY --from=builder /opt/keycloak /opt/keycloak
ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start", "--optimized"]

 

 

발생한 에러

ERROR: A provider JAR was updated since the last build, please rebuild for this to be fully utilized.

 

 

 

원인 및 해결 방법

 

원인과 해결방법이 모두 keycloak issue 페이지에 잘 설명되어있다.

https://github.com/keycloak/keycloak/issues/38893

 

Multi-stage docker builds fail --optimized validation · Issue #38893 · keycloak/keycloak

Before reporting an issue I have read and understood the above terms for submitting issues, and I understand that my issue may be closed without action if I do not follow them. Area dist/quarkus De...

github.com

 

 

원인은 Docker 엔진이 28 버전으로 업그레이드 되면서 file의 해시값 변경을 검토하는데에 사용하는 timestamp 시간을 적절히 수정하지 못하고 있기 때문이라고 한다.

https://github.com/keycloak/keycloak/issues/38893#issuecomment-2806082239

 

 

해결방법

위 Dockerfile에서 주석처리 해놓은 부분처럼 build 단계 전에 내가 커스텀하게 넣어줄 provider들의 timestamp를 과거 시간으로 업데이트 해주는 것이다. 그럼 final 실행 단계에서 build 이전 단계의 provider 대비 timestamp 값이 증가하였으므로 수정 시각 체크에 성공한다.

 

provider 파일의 해시 비교를 회피하는 임시 방법이다. 나중에 Docker측이든, keycloak 측이든 해결 방법을 내놓을 것 같다. 우선 Dev 환경 적용 시에 문제없이 실행되고 있다.

 

728x90
반응형