일반적인 Docker 문제 해결
Docker 환경이 제대로 설치되어 있더라도 일반적인 사용 중에 문제가 발생할 수 있습니다. 몇 가지 일반적인 Docker 문제와 해결책을 살펴보겠습니다.
문제: Docker 데몬이 실행되지 않음
이전 단계에서 Docker 서비스를 이미 시작한 경우 이 단계를 건너뛸 수 있습니다.
Docker 명령을 실행하려고 할 때 다음과 같은 오류가 발생하면:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
이는 Docker 데몬이 실행되지 않음을 의미합니다. 이 문제를 해결하려면:
- Docker 서비스의 상태를 확인합니다.
sudo systemctl status docker
- 실행 중이 아니면 시작합니다.
sudo systemctl start docker
- 서비스가 시작되지 않으면 오류 로그를 확인합니다.
sudo journalctl -u docker
이 문제와 해결 방법을 시뮬레이션해 보겠습니다.
## 먼저, 문제를 시뮬레이션하기 위해 Docker 서비스를 중지합니다.
sudo systemctl stop docker
## Docker 명령을 실행해 봅니다.
docker ps
## "Cannot connect" 오류가 표시됩니다.
## 이제 서비스를 다시 시작하여 문제를 해결합니다.
sudo systemctl start docker
## Docker가 다시 작동하는지 확인합니다.
docker ps
문제: 권한 거부
다음과 같은 오류가 표시되면:
Got permission denied while trying to connect to the Docker daemon socket
이는 일반적으로 사용자가 Docker 소켓에 액세스할 권한이 없음을 의미합니다. 해결책은 사용자를 docker 그룹에 추가하는 것입니다.
sudo usermod -aG docker $USER
이 명령을 실행한 후에는 일반적으로 변경 사항을 적용하기 위해 로그아웃했다가 다시 로그인해야 합니다. labex 사용자가 이미 적절한 권한을 가지고 있는 랩 환경에 있으므로 이 단계를 수행할 필요가 없습니다.
문제: 디스크 공간 문제
Docker 는 사용하지 않는 이미지, 컨테이너 및 볼륨으로 인해 시간이 지남에 따라 상당한 디스크 공간을 소비할 수 있습니다. 시스템의 디스크 공간이 부족한 경우:
- Docker 디스크 사용량을 확인합니다.
docker system df
- 사용하지 않는 리소스를 제거합니다.
## 중지된 모든 컨테이너를 제거합니다.
docker container prune
## 사용하지 않는 모든 이미지를 제거합니다.
docker image prune
## 사용하지 않는 모든 볼륨을 제거합니다.
docker volume prune
## 또는 한 번의 명령으로 사용하지 않는 모든 것을 제거합니다.
docker system prune
정리 명령을 시연해 보겠습니다.
## 즉시 종료될 컨테이너를 몇 개 만듭니다.
docker run hello-world
docker run ubuntu echo "This will exit immediately"
## 이제 중지된 컨테이너를 정리합니다.
docker container prune
작업을 확인하라는 메시지가 표시됩니다.
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
y를 입력하여 확인합니다. 제거된 컨테이너를 보여주는 출력이 표시됩니다.
문제: 컨테이너가 시작되지 않음
컨테이너가 시작되지 않으면 로그를 확인하여 조사할 수 있습니다.
## 먼저, 실패할 수 있는 컨테이너를 시작해 봅니다.
docker run --name failing-container ubuntu apt-get update
## 로그를 확인합니다.
docker logs failing-container
컨테이너가 실패한 이유를 나타내는 오류가 로그에 표시될 수 있습니다.
문제: 네트워크 문제
컨테이너가 서로 또는 외부 세계와 통신할 수 없는 경우:
- Docker 의 네트워크 구성을 확인합니다.
docker network ls
- 특정 네트워크를 검사합니다.
docker network inspect bridge
- 컨테이너 내에서 연결을 테스트합니다.
## 네트워킹으로 컨테이너를 시작합니다.
docker run -it ubuntu bash
## 컨테이너 내부에서 ping을 설치합니다.
apt-get update && apt-get install -y iputils-ping
## 웹사이트를 ping해 봅니다.
ping google.com
## 컨테이너를 종료합니다.
exit
Docker 로그 및 디버깅
일반적인 Docker 문제 해결을 위해 Docker 데몬 로그를 확인하는 것이 도움이 될 수 있습니다.
sudo journalctl -u docker
특정 컨테이너의 로그를 보려면:
docker logs <container_id>
실시간 로그 스트림을 얻을 수도 있습니다.
docker logs -f <container_id>
이러한 문제 해결 기술은 가장 일반적인 Docker 문제를 진단하고 해결하는 데 도움이 됩니다.