본문 바로가기

MLOps & DevOps/Kubernetes & Docker

[docker] docker daemon오류 해결법, dockerd의 개념, socket과의 관계

👋 Intro

안녕하세요, 유블린입니다.

이 글에서는 Dockerd에 대해 공부해 보려고 합니다.

 

도커를 처음 설치하고 docker로 시작하는 커맨드 라인을 쳐봤을때 발생하는 오류를 종종 보신적이 있으실겁니다.

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

이 에러 메시지에서 출발해서 공부해본 결과를 짧게 정리해 봤습니다. 정리한 내용의 순서는 아래와 같습니다.

1. dockerd의 개념
2. socket과의 관계
3. docker daemon오류 해결법

 

 

앞서 언급했 듯 도커를 설치하고 처음으로 docker로 시작하는 명령어를 실행하면 아래와 같은 오류를 만날 수 있습니다.

docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

이 오류의 내용은 unix:///var/run/docker.sock에 있는 docker daemon에 연결할 수 없는데 docker daemon이 돌고있는게 맞는지 확인하는 것입니다.

 

그렇다면, docker.sock은 무엇일까요?

docker 공식 홈페이지의 dockered 라는 문서를 보면, dockered라는 개념을 먼저 설명해 주고 있습니다. dockered란 컨테이너들을 관리해주는 백그라운드 프로세스(docker daemon)라는 것이죠. dockerd를 실행하기 위해서는 "dockerd"라는 커맨드라인을 쳐주면 됩니다. 터미널을 다시 시작하거나 새로운 터미널을 열어보면 docker로 시작하는 커맨드가 잘 작동하는 것을 확인할 수 있습니다.

 

그럼 dockerd 는 socket과 무슨 관계가 있길래 오류메시지가 저렇게 발생할까요?

마찬가지로 공식 문서에 Docker daemon(dockered)은 Docker Engine API의 요청을 unix, tcp, rd 세 종류의 소켓으로 받을 수 있다고 명시되어 있습니다. 이 세가지 중에서 디폴트 값은 unix 도메인 소켓입니다. 즉, unix:///var/run/docker.sock은 unix 컴퓨터와 통신하기 위한 소켓이죠. 앞서 말한 것 처럼 디폴트 값이 unix 도메인 소켓이기 때문에 "dockerd"라는 커os드 라인을 입력하면 docker daemon이 잘 돌아가게 되는 겁니다.

 

결국 해결책으로 docker daemon을 돌려주기만 하면 됩니다.

하지만, 매번 dockerd를 실행할 수 없기 때문에 아래 두 줄을 입력해줍니다.

# dockerd와 같이 docker를 daemon으로 실행
systemctl start docker

# 컴퓨터 재부팅 혹은 부팅 시 자동으로 docker daemon 실행
systemctl enable docker

 


(추가로 위 내용을 다했는데도 CLI 환경에서 docker 관련 명령어가 안된다면, 도커 로그인도 시도해 보시길 바랍니다.)

도커 로그인 방법

 docker login -u <dockerID>

👍 Outro

이번글에서는 docker daemon오류 해결법 그리고, dockerd의 개념과 socket과의 관계에 대해 다뤄보았습니다.

 

저도 공부하면서 정리하다보니 틀린 내용이 있을 수 있습니다. 내용 오류에 대한 피드백은 언제나 환영입니다 :)

미래의 저와 다른 분들께 도움이 되었길 바라며 이만 줄이겠습니다.


References

dockered document