자동화를 배우는 과정에서 실수는 필연입니다. 문제는 “실수”가 아니라 복구가 안 되는 상태예요.
이번 편은 n8n을 로컬 도커로 돌릴 때, 마음껏 실험해도 망하지 않게 만드는 최소 복구 루틴을 정리합니다.
Docker에서 컨테이너는 언제든 지웠다 다시 만들 수 있는 “가벼운 껍데기”입니다.
반면 n8n의 워크플로우/설정/실행 데이터는 유지되어야 하죠.
그래서 n8n은 도커 구성에서 데이터를 볼륨에 두는 방식이 일반적이고,
Docker 문서도 볼륨을 “백업/복원/마이그레이션”하는 방법을 안내합니다. ([docs.docker.com](https://docs.docker.com/engine/storage/volumes/))
참고로
1편의 compose.yaml처럼
“n8n_data” 같은 볼륨 이름은 compose 프로젝트명에 따라 실제 볼륨 이름이 달라질 수 있습니다.
(예: 프로젝트 폴더에서 아래를 실행해 “실제 볼륨 이름”을 확인합니다.
Docker 공식 문서의 “Back up a volume” 방식은
임시 컨테이너를 띄워 볼륨을 마운트하고, tar로 묶어 외부로 빼는 패턴입니다. ([docs.docker.com](https://docs.docker.com/engine/storage/volumes/))
위 패턴 자체가 Docker 공식 “Back up a volume” 가이드에 해당합니다. ([docs.docker.com](https://docs.docker.com/engine/storage/volumes/))
Docker 문서의 “Restore volume from a backup”도 동일하게 임시 컨테이너로 tar를 풀어 넣는 방식입니다. ([docs.docker.com](https://docs.docker.com/engine/storage/volumes/))
복원 후에는 다시 n8n을 올리면 됩니다:
볼륨 백업은 “전체 복구”에 강하지만, 매번 tar로 관리하는 건 번거로울 수 있습니다.
그래서 초반에는 워크플로우를 JSON으로 내보내 파일로 보관(깃에 커밋)하는 습관이 엄청 도움이 됩니다.
n8n은 워크플로우를 JSON으로 Export/Import하는 방법을 학습 코스 문서로도 안내합니다. ([docs.n8n.io](https://docs.n8n.io/courses/level-one/chapter-6/))
좀 더 운영에 가까운 방식으로는 n8n CLI를 사용해 워크플로우/크레덴셜을 import/export할 수 있습니다.
단, ID 충돌 시 덮어쓰기 같은 주의점이 있어, “초보자 기본 루틴”은 3번(워크플로우 JSON Export)을 먼저 추천합니다. ([docs.n8n.io](https://docs.n8n.io/hosting/cli-commands/))
n8n CLI로 워크플로우/크레덴셜을 import할 때, 같은 ID가 이미 있으면 덮어쓸 수 있습니다.
문서에서도 ID 충돌을 피하려면 기존 데이터를 삭제하거나 ID를 변경하라고 안내합니다. ([docs.n8n.io](https://docs.n8n.io/hosting/cli-commands/))
5편부터는 “운영형 서버로 확장” 파트로 넘어갑니다.
왜 HTTPS/도메인/리버스 프록시가 필요하고,
특히
0) 왜 “볼륨 + 백업”이 먼저냐
docker export는 “컨테이너 파일시스템”만 내보내며, 볼륨 데이터는 포함하지 않는다고 Docker 공식 문서에 명시되어 있습니다. ([docs.docker.com](https://docs.docker.com/reference/cli/docker/container/export/))
1) 내 n8n이 정말 볼륨을 쓰고 있는지 확인
/home/node/.n8n를 volume에 마운트하는 구조라면 기본은 OK입니다.
Docker Compose는 docker compose up 시 볼륨이 없으면 생성하고, 있으면 기존 볼륨을 사용한다고 설명합니다. ([docs.docker.com](https://docs.docker.com/reference/compose-file/volumes/))
services:
n8n:
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:n8n-local_n8n_data) — 아래 백업 단계에서 볼륨 이름을 확인합니다.
2) (핵심) 볼륨 백업/복원 루틴: tar로 끝내기
2-1) 볼륨 이름 확인
docker volume ls2-2) 백업: 볼륨을 tar.gz로 저장
docker compose stopmkdir -p backups# 예시: 실제 볼륨명이 n8n-local_n8n_data 라고 가정
docker run --rm \
-v n8n-local_n8n_data:/volume \
-v "$(pwd)/backups:/backup" \
busybox \
sh -c 'tar czf /backup/n8n_data_$(date +%Y%m%d_%H%M%S).tar.gz -C /volume .'2-3) 복원: tar.gz를 다시 볼륨에 풀기
# 1) (필요 시) 기존 볼륨을 새로 만들거나 비우기 전에 반드시 백업!
# docker volume rm n8n-local_n8n_data
# docker volume create n8n-local_n8n_data
# 2) 복원(백업 파일명만 바꿔주세요)
docker run --rm \
-v n8n-local_n8n_data:/volume \
-v "$(pwd)/backups:/backup" \
busybox \
sh -c 'tar xzf /backup/여기에_백업파일.tar.gz -C /volume'docker compose up -d3) “워크플로우만” 내보내서 버전관리하기(초보자 추천)
workflows/ 폴더에 모아두고 커밋(버전관리)4) (선택) n8n CLI로 워크플로우/크레덴셜까지 내보내기
5) “실험 전 30초” 체크리스트(진짜 이거면 됩니다)
/home/node/.n8n 마운트 확인 ([docs.docker.com](https://docs.docker.com/reference/compose-file/volumes/))6) 안티그래비티 프롬프트 예시: 백업/복구를 ‘안전하게’ 시키는 말투
프롬프트 1) 볼륨 백업 스크립트 만들기(명령 실행 전 리뷰)
n8n을 Docker Compose로 로컬 운영 중이야.
공식 문서 기준으로만, Docker volume을 tar.gz로 백업/복원하는 루틴을 만들어줘.
조건:
- 터미널 명령은 실행 전에 반드시 목록으로 먼저 보여줘(설명 포함)
- 백업은 ./backups 폴더에 저장
- 복원 명령도 같이 만들어줘
- docker export는 볼륨을 포함하지 않는다는 점도 체크리스트에 포함
출력:
1) 백업 절차(우선 n8n stop 포함)
2) 복원 절차
3) 실험 전 30초 체크리스트프롬프트 2) “실수로 뭔가 지웠을 때” 복구 플로우만 빠르게
n8n 로컬 도커에서 실수로 컨테이너를 내려버렸어(또는 compose down 했어).
데이터가 볼륨에 남아있는지 확인하고, 다시 올리는 최소 절차를
공식 문서 기준으로만 단계별로 정리해줘.
원하는 출력:
- 어떤 명령으로 볼륨/컨테이너 상태 확인하는지
- 안전하게 다시 올리는 순서(docker compose up -d 등)
- 데이터가 날아간 경우(볼륨 삭제 등)에는 어떤 복원 루틴이 필요한지다음 편 예고
WEBHOOK_URL, N8N_HOST 같은 설정이 왜 중요한지(그리고 어디서 실수하는지)를
실제 운영 시나리오로 설명할게요. ([docs.n8n.io](https://docs.n8n.io/hosting/configuration/configuration-examples/webhook-url/))
자동화 기초 04 로컬에서 안전하게 실험하기: 볼륨/백업/실수 복구 루틴
이 글을 끝내면
권장 루틴(로컬)
추천 루틴
핵심 주의사항