
docker-compose를 이용하려 레디스 컨테이너, 스프링 부트 App 컨테이너를 띄우고
스프링과 레디스를 연동하여 사용하는 코드를 확인하는 과정을 진행하던 중 발생한 에러이다.
우선 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"]
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 에러가 RUN ./gradlew bootJar 구절 실행 과정에서 발생하는
것을 확인할 수 있다.
고통 속에 불꽂 구글링을 한 결과, 빌드 과정에서 베이스 이미지가 되는 openjdk:17내에 xargs 가 존재하지 않아 발생하는 문제인 것으로 파악했다. 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"]