Docker 컨테이너에서 S3 관련 에러가 발생한 경우 원인은 대부분 환경 변수가 제대로 설정되지 않은 것입니다.
이번 포스팅에서는 환경 변수를 설정하고 Docker 컨테이너에 적용하는 다양한 방법을 정리해 보겠습니다.
🛑 문제 발생
Docker Hub에서 이미지를 pull 한 뒤 run 명령어를 실행했으나, 다음과 같은 S3 관련 에러가 발생했습니다.
원인 분석
컨테이너에서 필요한 S3 환경 변수(예: AWS_S3_ACCESS_KEY, AWS_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를 조합하여 관리하는 방식입니다.
'Docker > 에러 해결' 카테고리의 다른 글
Spring Boot 애플리케이션에서 Redis Connection refused 에러 해결 (0) | 2024.12.02 |
---|---|
Docker 플랫폼 미스매치 오류 해결하기 (0) | 2024.11.29 |