최근 도커 환경을 구성하면서 흥미로운 문제를 경험했습니다. 윈도우 Docker Desktop에서 빌드한 이미지는 리눅스 서버에서 컨테이너 실행이 잘 되었지만, 다른 리눅스 서버에서 빌드한 이미지는 동일한 리눅스 서버에서 컨테이너를 생성하지 못하는 상황이 발생했습니다.
문제 상황
- 윈도우 Docker Desktop 빌드 이미지 → 리눅스 서버 실행 가능 ✅
- 리눅스 서버 빌드 이미지 → 리눅스 서버 실행 불가 ❌
- 구체적인 오류 메시지를 확인할 수 없는 상태라 원인을 직접 추적하기 어려움
이 과정에서 조사해보니 **도커 런타임(runtime)**과 관련된 이슈가 있음을 알게 되었습니다.
도커 런타임(Runtime) 이해
도커 컨테이너는 단순히 이미지 파일만으로 실행되는 것이 아니라, 이를 실제로 실행하는 "런타임"이 필요합니다.
- docker.io (기존 도커 런타임)
예전부터 많이 사용되던 런타임이지만, 리눅스 환경에서 사용 시 라이선스 문제로 인해 유료화 이슈가 생겼습니다. - containerd (리눅스 전용 경량 런타임)
현재는 도커와 쿠버네티스에서 공식적으로 사용하는 런타임으로, 오픈소스 기반으로 활발히 개발·배포되고 있습니다.
즉, 동일한 "도커"라고 하더라도 실제 내부적으로 어떤 런타임을 사용하고 있는지에 따라 이미지 실행 호환성 문제가 생길 수 있습니다.
문제 원인 추정
현재 사용 중인 리눅스 서버에 설치된 도커가 어떤 방식으로 설치되었는지 알 수 없었고, 런타임 역시 docker.io와 containerd가 혼재되어 있었을 가능성이 있습니다. 이로 인해 특정 환경에서 빌드한 이미지가 다른 환경에서 실행되지 않는 문제가 발생한 것으로 보입니다.
해결 방법: 도커 재설치
결론적으로는 기존 환경을 신뢰하기 어렵다고 판단하여, 깨끗하게 도커를 제거하고 최신 버전의 도커와 containerd 기반 런타임을 다시 설치하기로 했습니다.
설치 방법 (Ubuntu 기준)
# 기존 도커 제거
sudo apt-get remove docker docker-engine docker.io containerd runc
# 패키지 업데이트 및 필수 도구 설치
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
# Docker GPG 키 등록
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Docker 저장소 추가
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 최신 Docker 엔진 설치
# 앞서 실행 중인 업데이트가 진행 중인 경우 apt-gett update할 때 오류 날 수 있음.
# 잠깐 기다렸다가 다시 update하면 됨.
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 설치 확인
sudo docker --version
도커 설치 후 도커 빌드할 때 아래와 같은 오류 나올 수 있음.
ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.sock/_ping": dial unix /var/run/docker.sock: connect: permission denied
sudo를 쓰거나 접속해 있는 사용자를 docker 그룹에 추가해야 함.
# docker 그룹에 사용자 추가
sudo usermod -aG docker $USER
sudo usermod -aG docker {사용자 이름}
# 현재 터미널 세션에서 그룹 변경을 즉시 반영하는 명령어
newgrp docker
# groups에 docker가 포함되어 있어야 함.
groups
마무리
이번 경험을 통해 단순히 "도커를 설치했다"라는 사실만으로는 안심할 수 없다는 점을 배웠습니다. 도커 런타임 종류와 설치 방식에 따라 이미지 실행 호환성 문제가 발생할 수 있으며, 특히 리눅스 환경에서는 containerd 기반으로 설치하는 것이 안정적이라는 결론을 얻었습니다.
앞으로는 환경을 구성할 때 런타임 종류까지 반드시 확인해야겠다고 다짐했습니다.
이제 블로그도 딸깍하면 글 하나 만들어지는 시대네요...허허허
'배운 내용 > Docker' 카테고리의 다른 글
| [Docker]Docker 환경에서 회사 내부 네트워크용 Ubuntu 국내 미러 설정과 Python 설치 방법 (0) | 2025.09.05 |
|---|---|
| [Docker]Dockerfile(Ubuntu 24.04) 회사 내부망에서 apt HTTPS 우회 빌드 (0) | 2025.09.05 |
| 도커 이미지 로드 용량 부족 에러 날 때 (0) | 2024.08.02 |
| Dockerfile 만들 때 필요한 패키지만 설치하기 (1) | 2024.04.12 |
| docker 기본 명령어 (0) | 2023.07.26 |
