Docker Redis 컨테이너 실행 시 redis.conf 파일 생성 오류

2024. 8. 13. 21:35·Backend/Redis

docker 명령어로 redis.conf 파일을 설정하던 중 발생한 오류였다. 내가 작성한 명령어는 아래와 같았다.

docker run --name redis-serer -p 6379:6379 -d -v redis-volume:/data -v ~/redis.conf:/etc/redis/redis.conf redis redis-server /etc/redis/redis.conf
  • docker run : 도커 컨테이너 실행 

 

  • --name redis-serer : 컨테이너 이름을 redis-server로 지정

 

  • -p 6379:6379 : 호스트 포트 6379, 컨테이너 포트 6379 (이 설정을 통해 호스트 머신에서 localhost:6379로 접근하면 컨테이너 내부의 redis 서버에 연결할 수 있다.)

 

  • -d : 백그라운드에서 실행

 

  • -v redis-volume:/data : Docker의 볼륨을 사용하여 컨테이너의 /data 디렉터리를 redis-volume이라는 이름의 Docker 볼륨에 매핑

 

  • -v ~/redis.conf:/etc/redis/redis.conf : 호스트 시스템의 ~/redis.conf 파일을 컨테이너 내부의 /etc/redis/redis.conf 파일에 매핑

 

  • redis : docker hub에 저장된 도커 이미지 파일의 이름

 

  • redis-server /etc/redis/redis.conf : 컨테이너가 실행될 때 redis-server 명령어를 실행하며, 다음 경로에 있는 설정 파일로 redis 서버를 설정하라는 의미 

 

 

 

 

하지만.... redis 서버 내부에는 /etc/redis/redis.conf 라는 파일이 존재하지 않았다. 그래도 해당 경로에 redis.conf 파일이 생성될 줄 알았다. 그러나 돌아온 결과는 redis.conf 폴더가 생성되는 것 이었다............................... 폴더...디렉토리!!!!! 

 

해당 문제를 해결하기 위해 열심히 삽질했다. (5시간 경과.....) Dockerfile을 이용하는 방법을 찾아냈다.

 

Dockerfile을 이용하는 방법

1. redis.conf 파일을 생성

각자 작성한 redis.conf 파일을 이용하자. 나는 아래와 같이 설정했다.

# 연결 가능한 네트위크(0.0.0.0 = Anywhere)
bind 0.0.0.0

# 연결 포트
port 6379

# Master 노드의 기본 사용자 비밀번호
requirepass redis

# 최대 사용 메모리 용량(지정하지 않으면 시스템 전체 용량)
maxmemory 2gb

# 설정된 최대 사용 메모리 용량을 초과했을때 처리 방식
# - noeviction : 쓰기 동작에 대해 error 반환 (Default)
# - volatile-lru : expire 가 설정된 key 들중에서 LRU algorithm 에 의해서 선택된 key 제거
# - allkeys-lru : 모든 key 들 중 LRU algorithm에 의해서 선택된 key 제거
# - volatile-random : expire 가 설정된 key 들 중 임의의 key 제거
# - allkeys-random : 모든 key 들 중 임의의 key 제거
# - volatile-ttl : expire time(TTL)이 가장 적게 남은 key 제거 (minor TTL)
maxmemory-policy volatile-ttl

# == RDB 관련 설정 ==
# 저장할 RDB 파일명
dbfilename backup.rdb
# 15분 안에 최소 1개 이상의 key가 변경 되었을 때
save 900 1
# 5분 안에 최소 10개 이상의 key가 변경 되었을 때
save 300 10
# 60초 안에 최소 10000개 이상의 key가 변경 되었을 때
save 60 10000
# RDB 저장 실패 시 write 명령 차단 여부
stop-writes-on-bgsave-error no

# == AOF 관련 설정 ==
# AOF 사용 여부
appendonly yes
# 저장할 AOF 파일명
appendfilename appendonly.aof
# 디스크와 동기화 처리 방식
# - always : AOF 값을 추가할 때마다 fsync를 호출해서 디스크에 쓰기
# - everysec : 매초마다 fsync를 호출해서 디스크에 쓰기
# - no : OS가 실제 sync를 할 때까지 따로 설정하지 않음
# appendfsync everysec

# == Replication 관련 설정 ==
# Slave Redis 설정
# slaveof 127.0.0.1 6380

 

 

2. Dockerfile 작성

Dockerfile 안에는 아래와 같이 작성해준다. Dockerfile을 이용해서 커스텀 Redis 이미지를 생성하고, 동시에 이 이미지에 redis.conf 파일을 포함시키는 방법이다. 이러한 방법을 이용한다면 해당 경로에 파일이 존재하지 않아 발생하는 오류를 다신 겪지 않을 수 있다.

FROM redis:latest
COPY ./redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]

 

 

3. Docker 이미지 빌드 및 실행

 

docker build -t my-redis .

 

 

최종적으로 내가 작성한 명령어이다.

docker run --name redis-server -d -v redis-volume:/data my-redis

 

 

redis-cli 에서 info 명령어를 통해 확인해보면, 내가 설정한 config_file 경로와 마운트된 경로를 확인할 수 있다. 삽질 끝!

'Backend/Redis' 카테고리의 다른 글
  • com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type java.time.LocalDateTime not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"
  • Could not read JSON:Cannot construct instance of org.springframework.data.domain.PageImpl (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
kimdozzi
kimdozzi
끝까지 포기하지 않으면, 내가 다 이겨!
  • kimdozzi
    도브로
    kimdozzi
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • Problem Solving (49)
        • Baekjoon (29)
        • Programmers (0)
        • LeetCode (17)
        • 삼성 유형 (2)
      • Computer Science (27)
        • Operating System (2)
        • Algorithms (13)
        • Network (6)
        • DataBase (6)
      • Backend (33)
        • JavaScript (0)
        • TypeScript (6)
        • Java (7)
        • Spring Boot (7)
        • Spring Security (6)
        • JPA (2)
        • Mybatis (1)
        • Junit5 (1)
        • Redis (3)
      • DevOps (14)
        • Git, Github (5)
        • docker (4)
        • AWS (3)
        • nginx (2)
      • etc (6)
        • IntelliJ (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 티스토리
    • 설정
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    삼성기출
    백준
    알고리즘
    S3
    티스토리챌린지
    docker
    인덱스 시그니처
    타입스크립트
    인터페이스
    인덱서블 타입
    TypeScript
    점 업데이트
    세그먼트 트리
    도커
    오블완
    docker image
    Bucket
    PrefixSum
    오프라인 쿼리
    interface
    segment tree
    파이썬
    온라인 쿼리
    구간합
    python
    CORS
    imos법
    누적합
    컨테이너
    구간 업데이트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kimdozzi
Docker Redis 컨테이너 실행 시 redis.conf 파일 생성 오류
상단으로

티스토리툴바