Docker를 오래 굴리다 보면 설치 이후에 만나는 자잘한 운영 이슈들이 쌓입니다. 실무에서 자주 쓴 것들을 모아뒀어요.
버전 변경 (다운그레이드 포함)
특정 버전에서 버그가 있거나 호환성을 맞춰야 할 때 버전을 바꿉니다.
docker -v # 현재 버전 확인
apt-cache policy docker-ce # 설치 가능한 버전 확인
apt-get remove docker-ce docker-ce-cli # 현재 버전 제거
# 원하는 버전으로 설치 (--allow-downgrades 로 하위 버전도 허용)
apt-get install -y docker-ce=[버전] docker-ce-cli=[버전] --allow-downgrades
service docker restart
docker-ce 와 docker-ce-cli 의 버전을 서로 맞춰야 한다는 점이 포인트입니다.
데이터 저장 경로 변경
기본 저장 경로(/var/lib/docker)의 디스크가 부족할 때, 새 디스크로 옮깁니다.
service docker stop
mv /var/lib/docker /docker-data # 기존 데이터 이동
vim /etc/docker/daemon.json
{
"data-root": "/docker-data/docker"
}
service docker restart
docker pull [이미지] # 새 경로에 저장되는지 확인
컨테이너 시간대 변경
컨테이너 로그 시각이 UTC로 찍혀 헷갈릴 때, 시간대를 한국으로 맞춥니다.
dpkg-reconfigure tzdata
# Asia(6) → Seoul(69) 선택
용량·캐시 정리
docker system df # 도커가 차지한 용량 확인
docker image prune # 태그 없는 댕글링 이미지 삭제
docker builder prune # 빌드 캐시 삭제
docker rmi [이미지] # 특정 이미지 삭제
자주 만나는 오류
alpine + nginx 컨테이너가 바로 꺼짐
Dockerfile로 alpine에 nginx를 올렸는데 웹 접속이 안 되고, 들어가 보면 nginx가 꺼져 있는 경우입니다. Nginx는 데몬으로 동작하는데, Docker는 지정한 명령이 끝나면 컨테이너를 종료해버리기 때문이에요. 포그라운드로 실행되도록 설정하면 해결됩니다.
CMD ["nginx", "-g", "daemon off;"]
docker.sock 충돌
docker.socket: Failed to create listening socket (/run/docker.sock): Address already in use
소켓이 충돌한 경우입니다. 소켓 파일을 지우고 재시작하면 됩니다.
rm -rf /var/run/docker.sock
service docker restart
nodemon: too many open files
[nodemon] Internal watch failed: EMFILE: too many open files
Node 개발 컨테이너에서 파일 감시 한도를 넘겨 발생합니다. nodemon을 전역으로 설치하거나 Dockerfile에 추가해 해결했습니다.
npm install -g nodemon
이런 오류들은 원인을 알고 나면 대처가 간단하지만, 처음 만나면 한참 헤매기 쉽습니다. 로그부터 차분히 보는 습관이 결국 제일 빠른 길이에요.