Docker 컨테이너에서 S3 관련 에러가 발생한 경우 원인은 대부분 환경 변수가 제대로 설정되지 않은 것입니다.

이번 포스팅에서는 환경 변수를 설정하고 Docker 컨테이너에 적용하는 다양한 방법을 정리해 보겠습니다.


🛑 문제 발생

Docker Hub에서 이미지를 pull 한 뒤 run 명령어를 실행했으나, 다음과 같은 S3 관련 에러가 발생했습니다.

원인 분석

컨테이너에서 필요한 S3 환경 변수(예: AWS_S3_ACCESS_KEYAWS_S3_BUCKET_NAME 등)가 설정되지 않은 것이 원인입니다.


✅ 해결 방법

1️⃣ .env 파일 사용

Docker 컨테이너 실행 시, 필요한 환경 변수를 .env 파일에 저장하여 설정할 수 있습니다.

1. .env 파일 작성

아래와 같은 형식으로 .env 파일을 작성합니다:

AWS_S3_ACCESS_KEY=your-access-key
AWS_S3_SECRET_KEY=your-secret-key
AWS_S3_BUCKET_NAME=your-bucket-name
AWS_S3_REGION=your-region

2. Docker 컨테이너 실행

컨테이너 실행 시 .env 파일을 로드하여 환경 변수를 적용합니다:

docker run -p 8080:8080 --env-file=.env -d --name social <이미지이름>

다른 해결 방법들

2️⃣ Spring Boot 프로젝트 내 환경 변수 통합

만약 Spring Boot 프로젝트를 Docker 이미지로 빌드한 경우 환경 변수를 Spring Boot의 application.yml 또는 application.properties에 매핑할 수 있습니다.

1. application.yml 설정

application.yml 파일에 아래와 같이 환경 변수를 매핑합니다:

cloud:
  aws:
    credentials:
      access-key: ${AWS_S3_ACCESS_KEY}
      secret-key: ${AWS_S3_SECRET_KEY}
    region:
      static: ${AWS_S3_REGION}
    s3:
      bucket: ${AWS_S3_BUCKET_NAME}

2. Dockerfile 수정

.env 파일을 Docker 빌드 과정에 포함시킵니다:

COPY .env /app/.env

3. 컨테이너 실행

컨테이너 실행 시 .env 파일에 설정된 값을 사용합니다:

docker run -p 8080:8080 -d --name social <이미지이름>

3️⃣ Docker Compose 활용

Docker Compose를 사용하면 환경 변수를 보다 편리하게 관리할 수 있습니다.

1. docker-compose.yml 작성

.env 파일을 Docker Compose와 함께 사용할 수 있도록 설정합니다:

version: '3.8'
services:
  app:
    image: <이미지이름>
    ports:
      - "8080:8080"
    env_file:
      - .env

2. Docker Compose 실행

docker-compose up -d

 정리

  • Docker 환경 변수 설정은. env 파일, Spring Boot 설정, 또는 Docker Compose를 통해 간단히 해결할 수 있습니다.
  • 권장되는 방법은. env 파일과 Docker Compose를 조합하여 관리하는 방식입니다.

+ Recent posts