docker-compose 변경

arky uhm·2025년 5월 12일

MongoDB

목록 보기
2/14

docker-compose.yml 파일 내용 변경 시 컨테이너 재기동

✅ yml파일 내 logging 옵션 추가

# cd /mongodata
# vi docker-compose.yml
services:
  mongo1:
    image: mongo:latest
    container_name: mongo1
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./data/mongo1:/data/db
    command: ["mongod", "--replSet", "myReplicaSet", "--bind_ip_all"]
    networks:
      - mongoCluster
## 추가 start      
    logging:  
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
## 추가 end

  mongo2:
    image: mongo:latest
    container_name: mongo2
    restart: always
    ports:
      - 27018:27017
    volumes:
      - ./data/mongo2:/data/db
    command: ["mongod", "--replSet", "myReplicaSet", "--bind_ip_all"]
    networks:
      - mongoCluster
## 추가 start            
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
## 추가 end

  mongo3:
    image: mongo:latest
    container_name: mongo3
    restart: always
    ports:
      - 27019:27017
    volumes:
      - ./data/mongo3:/data/db
    command: ["mongod", "--replSet", "myReplicaSet", "--bind_ip_all"]
    networks:
      - mongoCluster
## 추가 start            
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
## 추가 end

networks:
  mongoCluster:
    external: true

--로그 설정 확인 (변경 전)
# docker inspect mongo1 | grep -A 5 LogConfig
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "mongoCluster",
            "PortBindings": {    

#### ✅ 컨테이너 재기동
# docker compose up -d --no-deps --force-recreate mongo1 mongo2 mongo3  ## docker-compose.yml파일이 있는 곳에서 실행 
[+] Running 3/3
 ✔ Container mongo3  Started  11.5s
 ✔ Container mongo1  Started  11.7s
 ✔ Container mongo2  Started  11.7s

/*
. --no-deps: 지정한 서비스(mongo1, mongo2, mongo3)만 대상으로 하며, 이들이 의존하는 다른 서비스((예: db, cache 등)는 영향받지 않음
. --force-recreate: 변경 사항이 있는 경우 컨테이너를 반드시 새로 생성
. -d : 백그라운드(detached) 모드로 실행
*/

--로그 설정 확인 (변경 후)
# docker inspect mongo1 | grep -A 5 LogConfig
            "LogConfig": {
                "Type": "json-file",
                "Config": {
                    "max-file": "3",
                    "max-size": "10m"
                }

#### ✅ 로그 확인
--호스트의 쉘을 컨테이너 안에서 실행
# docker run -it --privileged --pid=host ubuntu nsenter -t 1 -m -u -n -i sh
/*
. docker run -it : 새 컨테이너를 인터랙티브(터미널 연결) 모드로 실행
. --privileged : 컨테이너에 거의 모든 호스트 권한을 부여(장치, 커널 기능 등 포함)
. --pid=host : 컨테이너가 호스트의 PID(namespace)를 공유하도록 설정함. 즉, 컨테이너에서 호스트의 모든 프로세스를 볼 수 있음. 
. ubuntu: 베이스 이미지(여기서는 Ubuntu 리눅스)
  ※ 대표적으로 사용할 수 있는 공식 베이스 이미지 : debian, ubuntu, alpine, centos 등
. nsenter: 네임스페이스 진입을 위한 리눅스 명령어
  ※ #which nsenter
     /usr/bin/nsenter
. -t 1 : 타겟 PID 1(리눅스 시스템의 init 프로세스, 즉 호스트의 루트 프로세스)을 지정
. -m -u -n -i : 각각 mount, UTS(호스트명), network, IPC 네임스페이스에 진입
. sh : 진입 후 실행할 쉘
*/

--컨테이너 리스트 확인
# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS                  PORTS                      NAMES
...
d931f156bd69   ubuntu         "nsenter -t 1 -m -u …"   About an hour ago   Up 5 minutes                                       sleepy_visvesvaraya
...
# cd /var/lib/docker/containers/<컨테이너ID>
# ls -al *.log
-rw-r----- 1 root root 1266744 May 12 06:18 <컨테이너ID>-json.log

/* 
해당 컨테이너가 내려가 있다면
*/
# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED       STATUS                        PORTS                      NAMES
d931f156bd69   ubuntu         "nsenter -t 1 -m -u …"   2 hours ago   Exited (137) 33 seconds ago                              sleepy_visvesvaraya
# docker start <컨테이너ID>
d931f156bd69...
# docker exec -it <컨테이너ID>
bash# cd /var/lib/docker/containers/<mongo1 컨테이너ID>
bash# # ls -al *.log
-rw-r----- 1 root root 1315230 May 12 06:36 <mongo1 컨테이너ID>-json.log

0개의 댓글