

Docker compose로 띄운 Kafka Log를 docker bindmount 사용해서 로컬에서 보기
하게 된 이유
카프카를 배워보려고 강의를 듣다가 VirtualBox와 Ubuntu로 설치하는 것이 힘들어보여서 Docker로 설치하였습니다.
그러다 보니 강의 개발 환경과 많이 달라졌었는데요. 강의에서 Kafka Log를 보는 일도 있다고 해서 이 때마다 로그를 확인하러 가기가 너무 시간이 오래 걸릴 것 같아서 로그를 docker bindmount을 사용해 로컬에서 바로 볼 수 있도록 해보겠습니다.
해결 과정
먼저 로컬에 logs라는 디렉터리를 먼저 만들어줬습니다.
mkdir logs
이제 이 디렉토리를 도커 안에 있는 kafka log가 쌓이는 폴더와 연결해주겠습니다.
그러려면 일단 confluentinc/cp-kafka
이 이미지 안에 어디에 로그가 쌓이는지 알아야 하는데요.
구글링 후에 /var/lib/kafka/data
여기에 쌓인다는 걸 알게 되었습니다.
그럼 이제 docker compose 파일을 수정해주도록 하겠습니다!
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ports:
- "22181:2181"
kafka:
image: confluentinc/cp-kafka:7.1.2
depends_on:
- zookeeper
ports:
- "29092:29092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
# 이부분 추가
volumes:
- ./logs:/var/lib/kafka/data
이렇게 도커 컴포즈를 띄워보면..
아래와 같은 에러가 발생합니다..!
Command [/usr/local/bin/dub path /var/lib/kafka/data writable] FAILED ! in Kafka
해결 방법을 모색한 결과, root 권한을 넣어주면 잘 된다는 얘기가 있어서
아래와 같이 Root 권한을 추가해주었습니다.
Root 권한을 추가한 docker compose 파일
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ports:
- "22181:2181"
kafka:
image: confluentinc/cp-kafka:7.1.2
# Root 권한
user: root
depends_on:
- zookeeper
ports:
- "29092:29092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
# Docker bindmount
volumes:
- ./logs:/var/lib/kafka/data
이제 잘 되더군요!
docker compose up
을 통해 이제 도커 컨테이너를 띄우고 logs 디렉터리를 확인해보겠습니다.
잘 들어가 있습니다!!
배운 점
- docker compose에 root 권한을 줄 수 있습니다.
- docker compose에 docker bindmount을 추가하는 방법을 깨달았습니다.