Dockerfile 내 RUN ./gradlew bootJar 실행시 'xargs not available' 에러

Minjae An·2024년 1월 17일
1

트러블 슈팅 기록

목록 보기
2/3
post-thumbnail

🫠 문제

docker-compose를 이용하려 레디스 컨테이너, 스프링 부트 App 컨테이너를 띄우고
스프링과 레디스를 연동하여 사용하는 코드를 확인하는 과정을 진행하던 중 발생한 에러이다.

우선 Dockerfile의 구성은 다음과 같았다.

Dockerfile

FROM openjdk:17 AS builder

COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src
RUN chmod +x ./gradlew
RUN ./gradlew bootJar

FROM openjdk:17
COPY --from=builder build/libs/*.jar /home/server.jar
ENTRYPOINT ["java", "-jar", "/home/server.jar", "--spring.profiles.active=dev"]

docker-compose.yml

version: '3'

services:
  redis:
    image: redis
    command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      - C:\\Users\\mj324\\be_projects\\spring-allinone-project\\redis.conf:/usr/local/etc/redis/redis.conf
    restart: unless-stopped
    networks:
      - test_network

  spring-all-in-one:
    container_name: spring-all-in-one
    build:
      context: ./
      dockerfile: ./Dockerfile
    ports:
      - "8080:8080"

      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_PW: 1234
    depends_on:
      - redis
    networks:
      - test_network
    restart: unless-stopped

networks:
  test_network:

프로젝트 세부 내용이 문제 상황과 관련하게 중요한 부분이 아니 상세히 논하지는 않겠다.

위 같은 상황에서 docker-compose.yml이 위치한 디렉터리에서 다음 명령을 실행해보았다.

docoker-compose up --build

'xargs not available' 에러


xargs not available 에러가 RUN ./gradlew bootJar 구절 실행 과정에서 발생하는
것을 확인할 수 있다.

😂 해결

고통 속에 불꽂 구글링을 한 결과, 빌드 과정에서 베이스 이미지가 되는 openjdk:17내에 xargs 가 존재하지 않아 발생하는 문제인 것으로 파악했다. Dockerfile에서 베이스 이미지를
아래와 같이 바꿔주니 정상적으로 실행되었다.

Dockerfile - 수정

FROM openjdk:17-jdk-alpine AS builder

COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src
RUN chmod +x ./gradlew
RUN ./gradlew bootJar

FROM openjdk:17-jdk-alpine
COPY --from=builder build/libs/*.jar /home/server.jar
ENTRYPOINT ["java", "-jar", "/home/server.jar", "--spring.profiles.active=dev"]

참고

profile
도전을 성과로

0개의 댓글