블로그 목록으로
Mac Mini 프로덕션 서버 - Colima docker.sock 6일 주기 끊김 디버깅
증상
colima status → running (정상)
docker ps → Cannot connect to the Docker daemon at unix:///Users/your-username/.colima/default/docker.sock.
Is the docker daemon running?
서버 다운 이력:
- 1차: 2026-06-04 18:00:19 KST
- 2차: 2026-06-10 22:17:38 KST (+6일 4시간 17분)
- 3차: 2026-06-17 05:36:02 KST (+6일 7시간 18분)
- 4차: 2026-06-22 16:10:20 KST (+5일 10시간 34분)
디버깅 과정
Step 1. 기본 상태 확인
colima statusINFO[0000] colima is running using macOS Virtualization.Framework
INFO[0000] arch: aarch64
INFO[0000] runtime: docker
INFO[0000] mountType: virtiofs
INFO[0000] docker socket: unix:///Users/your-username/.colima/default/docker.sock
INFO[0000] containerd socket: unix:///Users/your-username/.colima/default/containerd.sock
ls -la ~/.colima/default/docker.socksrw------- 1 your-username staff 0 Jun 17 11:44 /Users/your-username/.colima/default/docker.sock
→ 파일은 있지만 시각이 마지막 재시작 시점(Jun 17)에 고정되어 있음. 껍데기만 남은 상태.
Step 2. macOS 슬립 의심 → 제외
pmset -gdisplaysleep 0
disksleep 10
sleep 0 (sleep prevented by powerd)
networkoversleep 0
standby 0
→ sleep 0, displaysleep 0, standby 0 모두 비활성화. 슬립 제외.
Step 3. Colima 설치 시점 확인
ls -la $(brew --prefix)/Cellar/colima/total 0
drwxr-xr-x 3 your-username admin 96 May 2 23:29 .
drwxrwxr-x 31 your-username admin 992 May 3 15:03 ..
drwxr-xr-x 12 your-username admin 384 May 2 23:29 0.10.1
→ 2026-05-02 Colima 0.10.1 설치. 첫 다운이 2026-06-04이니 설치 후 33일 후 첫 발생.
Step 4. Colima 설정 확인 → vmType: vz 발견
cat ~/.colima/default/colima.yamlcpu: 8
disk: 150
memory: 12
arch: aarch64
vmType: vz # ← Apple Virtualization Framework
mountType: virtiofs # ← vz 전용, 가장 빠르지만 불안정
mountInotify: true # ← experimentalStep 5. fd 누수 의심 → 제외
colima sshLima VM 안에서:
sudo ls /proc/$(pgrep dockerd)/fd | wc -l51
cat /proc/$(pgrep dockerd)/limits | grep -i "open files"Max open files 1048576 1048576 files
→ 한도 1,048,576에 현재 51개. fd 누수 제외.
Step 6. macOS 프로세스 확인
ps aux | grep -E "colima|lima|ssh" | grep -v grepyour-username 66683 0.0 0.6 ... Wed11AM 1:58.91 /opt/homebrew/bin/limactl hostagent --pidfile /Users/your-username/.colima/_lima/colima/ha.pid ...
your-username 66676 0.0 0.3 ... Wed11AM 11:54.21 /opt/homebrew/bin/limactl usernet ...
your-username 37493 0.0 0.0 ... 4:13PM 0:00.00 ssh: /Users/your-username/.colima/_lima/colima/ssh.sock [mux]
→ limactl hostagent는 Wed11AM(Jun 17)부터 실행 중. SSH mux는 디버깅 시작할 때 생긴 것.
ps aux | grep virtiofsd | grep -v grep(출력 없음)
→ vmType: vz는 Apple Virtualization Framework 내장 방식이라 별도 virtiofsd 프로세스 없음.
Step 7. dockerd 생사 확인 → 살아있음
colima ssh -- docker ps→ 컨테이너 목록 정상 출력. dockerd 살아있음 확정.
Lima VM 접속 후:
pgrep dockerd1325
systemctl status docker● docker.service - Docker Application Container Engine
Active: active (running) since Wed 2026-06-17 11:44:30 KST; 5 days ago
Main PID: 1325 (dockerd)
Tasks: 76
Memory: 79.8M (peak: 119.5M)
CPU: 6min 18.458s
CGroup: /system.slice/docker.service
├─1325 /usr/bin/dockerd ...
├─1830 /usr/bin/docker-proxy -proto tcp -host-port 3001 ...
├─1914 /usr/bin/docker-proxy -proto tcp -host-port 80 ...
└─1936 /usr/bin/docker-proxy -proto tcp -host-port 443 ...
→ dockerd + 컨테이너 모두 정상 실행 중. dockerd 크래시가 아님.
Step 8. SSH 컨텍스트 우회 시도 → 실패 (컨텍스트 없음)
docker --context colima-ssh psFailed to initialize: unable to resolve docker endpoint: context "colima-ssh": context not found:
open /Users/your-username/.docker/contexts/meta/<context-hash>.../meta.json: no such file or directory
→ colima-ssh 컨텍스트 없음. 소켓만 사용하는 구조.
Step 9. dockerd 로그 확인 → 크래시 없음
Lima VM 안에서:
sudo journalctl -u docker --since "6 days ago" --no-pager | tail -100Jun 17 11:43:12 colima dockerd[1314]: time="..." level=info msg="Processing signal 'terminated'"
Jun 17 11:43:12 colima dockerd[1314]: time="..." level=info msg="Daemon shutdown complete"
Jun 17 11:43:12 colima systemd[1]: Stopped docker.service
-- Boot <lima-boot-id> -- ← Lima VM 재부팅
Jun 17 11:44:30 colima dockerd[1325]: time="..." level=info msg="Starting up"
Jun 17 11:44:30 colima dockerd[1325]: time="..." level=info msg="API listen on /run/docker.sock"
Jun 17 11:44:30 colima systemd[1]: Started docker.service
(이후 Jun 22까지 error/fatal 없음)
→ Jun 17 이후 dockerd는 한 번도 죽지 않음. 로그에 이상 없음.
Step 10. hostagent 로그 확인 → 원인 발견
cat ~/.colima/_lima/colima/ha.stderr.log | tail -100{"level":"info","msg":"Time sync: guest clock adjusted (was 2052ms off)","time":"2026-06-22T16:12:42+09:00"}
{"level":"info","msg":"Time sync: guest clock adjusted (was 2054ms off)","time":"2026-06-22T16:12:52+09:00"}
{"level":"info","msg":"Time sync: guest clock adjusted (was 2043ms off)","time":"2026-06-22T16:13:02+09:00"}
{"level":"info","msg":"Time sync: guest clock adjusted (was 2048ms off)","time":"2026-06-22T16:13:12+09:00"}→ 10초마다 ~2초씩 Lima VM 시계가 느려지고 있음. vmType: vz의 가상 클럭 버그.
grep -E "error|socket|forward" ~/.colima/_lima/colima/ha.stderr.log | tail -50{"level":"info","msg":"hostagent socket created at /Users/your-username/.colima/_lima/colima/ha.sock","time":"2026-06-17T11:44:21+09:00"}
{"level":"debug","msg":"Forwarding unix sockets","time":"2026-06-17T11:44:26+09:00"}
{"level":"debug","msg":"Running \"/usr/bin/ssh ... -O forward -L /Users/your-username/.colima/default/docker.sock:/var/run/docker.sock ...\"","time":"2026-06-17T11:44:26+09:00"}
{"error":"failed to run [...] -L 0.0.0.0:443:0.0.0.0:443 ...]: exit status 255","level":"warning","msg":"failed to set up forwarding tcp port 443 (negligible if already forwarded)","time":"2026-06-17T11:45:02+09:00"}
→ Jun 17 11:44:26에 docker.sock 포워딩 SSH 명령 실행 후 재설정 기록 없음. → 그 이후 ControlMaster가 죽었지만 hostagent가 재연결하지 않음. 소켓은 껍데기로 남음.
원인 정리
vmType: vz → 가상 클럭이 10초마다 2초씩 드리프트
→ hostagent가 계속 교정하지만 튀는 순간 SSH keepalive 응답 지연
→ SSH ControlMaster 연결 종료
→ docker.sock 포워딩 소실 (hostagent는 재연결 안 함)
→ colima status: running (Lima VM은 살아있음)
→ docker ps: 실패 (macOS ↔ VM 소켓 연결만 끊김)
긴급 복구 (재시작 없이)
colima ssh를 실행하면 SSH mux가 살아나므로, 그 위에 소켓 포워딩만 재추가.
# 1. 죽은 소켓 파일 제거
rm -f ~/.colima/default/docker.sock
# 2. docker.sock 포워딩 재설정
ssh \
-o IdentityFile="$HOME/.colima/_lima/_config/user" \
-o StrictHostKeyChecking=no \
-o NoHostAuthenticationForLocalhost=yes \
-o BatchMode=yes \
-o IdentitiesOnly=yes \
-o "ControlPath=$HOME/.colima/_lima/colima/ssh.sock" \
-O forward \
-L "$HOME/.colima/default/docker.sock:/var/run/docker.sock" \
-p 60302 127.0.0.1
# 3. 포트도 끊겼으면 80/443 재연결
ssh \
-o IdentityFile="$HOME/.colima/_lima/_config/user" \
-o StrictHostKeyChecking=no \
-o NoHostAuthenticationForLocalhost=yes \
-o BatchMode=yes \
-o IdentitiesOnly=yes \
-o "ControlPath=$HOME/.colima/_lima/colima/ssh.sock" \
-O forward \
-L "0.0.0.0:443:0.0.0.0:443" \
-p 60302 127.0.0.1
ssh \
-o IdentityFile="$HOME/.colima/_lima/_config/user" \
-o StrictHostKeyChecking=no \
-o NoHostAuthenticationForLocalhost=yes \
-o BatchMode=yes \
-o IdentitiesOnly=yes \
-o "ControlPath=$HOME/.colima/_lima/colima/ssh.sock" \
-O forward \
-L "0.0.0.0:80:0.0.0.0:80" \
-p 60302 127.0.0.1
# 4. 확인
docker ps근본 해결: vmType qemu 전환
vmType 변경은 VM 완전 재생성이 필요해서 컨테이너/이미지/볼륨이 초기화된다.
colima delete 후 colima start만 하면 macOS 13.5+ Apple Silicon에서는 기본값이 다시 vz로
잡히므로, start 시 플래그로 명시해야 한다.
# qemu가 없으면 먼저 설치
brew install qemu
colima stop
colima delete
colima start \
--cpu 8 \
--memory 12 \
--disk 150 \
--arch aarch64 \
--vm-type qemu \
--mount-type sshfs \
--mount-inotify=false
# 적용 확인
cat ~/.colima/default/colima.yaml
docker-compose -f docker-compose.prod.yml up -d --buildcolima.yaml에서 아래 항목이 맞으면 정상 적용된 것이다.
vmType: qemu
mountType: sshfs
mountInotify: false자동 업데이트 방지
brew pin colima
# 적용 확인
brew list --pinned
brew info colimabrew list --pinned 출력에 colima가 있으면 고정된 것이다. brew info colima에서도 Pinned 표시를 확인할 수 있다.
고정 해제:
brew unpin colimaQ&A
긴급 복구 후 이대로 두면 재발하나?
재발한다. 긴급 복구는 끊어진 SSH 포워딩을 수동으로 이어붙인 것뿐이다. 근본 원인인 vmType: vz의
가상 클럭 드리프트는 그대로라서 약 5~6일 후 SSH ControlMaster가 또 죽으면 동일 증상이 반복된다.
qemu로 바꾸면 뭔가 나빠지는 거 아닌가?
프로덕션 서버 기준으로 실질적으로 나빠지는 건 없다.
vz + virtiofs가 빠른 건 macOS ↔ VM 간 파일 I/O 속도다. 개발 환경에서 pnpm install, HMR 반영
속도 등에서 체감된다. 하지만 프로덕션은 빌드가 끝나면 Next.js가 메모리에서 실행되고,
node_modules와 .next는 이미 named volume으로 분리되어 있다. 일반 서빙 중에는 파일 I/O가 거의
없어서 속도 차이를 느낄 수 없다.
| vz | qemu | |
|---|---|---|
| 파일 I/O 속도 | 빠름 | 느림 |
| 가상 클럭 안정성 | 불안정 (버그) | 안정적 |
| 프로덕션 서빙 체감 차이 | 없음 | 없음 |
| 장기 운영 안정성 | SSH 끊김 재발 | 검증됨 |
왜 vz에서 이런 현상이 발생하나?
Apple Virtualization Framework는 macOS 13부터 생긴 새 VM 엔진이라 역사가 짧고 아직 버그가 있다.
VZ VM 안의 가상 CPU는 macOS가 스케줄링한다. macOS가 다른 작업을 처리하느라 VM에 CPU 타임을 덜 주는 순간, VM 입장에서는 시간이 느리게 흐른다.
실제 시간: 10초 경과
VM 입장: 8초 경과 (CPU를 못 받은 2초가 사라짐)
VM 시계는 CPU 틱 기반이라 CPU를 못 받은 만큼 느려진다. hostagent가 계속 교정하지만, 클럭이 크게 튀는 순간 SSH keepalive 응답이 늦어지고 ControlMaster가 종료된다. QEMU는 이 보정 로직이 오래전부터 안정화되어 있다.
참고 이슈
채팅 문의

