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

  • 최근 글

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

티스토리툴바