Mac Mini 프로덕션 서버 - Colima docker.sock 6일 주기 끊김 디버깅

mdx-header-module-scss-module__MxmQBa__profile-img-alt
mdx-header-module-scss-module__MxmQBa__profile-label-img-alt
타카

2026년 6월 22일 작성됨

공유하기

증상

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 status
INFO[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.sock
srw-------  1 your-username  staff  0 Jun 17 11:44 /Users/your-username/.colima/default/docker.sock

→ 파일은 있지만 시각이 마지막 재시작 시점(Jun 17)에 고정되어 있음. 껍데기만 남은 상태.


Step 2. macOS 슬립 의심 → 제외

pmset -g
displaysleep         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.yaml
cpu: 8
disk: 150
memory: 12
arch: aarch64
vmType: vz # ← Apple Virtualization Framework
mountType: virtiofs # ← vz 전용, 가장 빠르지만 불안정
mountInotify: true # ← experimental

Step 5. fd 누수 의심 → 제외

colima ssh

Lima VM 안에서:

sudo ls /proc/$(pgrep dockerd)/fd | wc -l
51
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 grep
your-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 dockerd
1325
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 ps
Failed 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 -100
Jun 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 deletecolima 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 --build

colima.yaml에서 아래 항목이 맞으면 정상 적용된 것이다.

vmType: qemu
mountType: sshfs
mountInotify: false

자동 업데이트 방지

brew pin colima
 
# 적용 확인
brew list --pinned
brew info colima

brew list --pinned 출력에 colima가 있으면 고정된 것이다. brew info colima에서도 Pinned 표시를 확인할 수 있다.

고정 해제:

brew unpin colima

Q&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가 거의 없어서 속도 차이를 느낄 수 없다.

vzqemu
파일 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는 이 보정 로직이 오래전부터 안정화되어 있다.


참고 이슈