본문 바로가기

프로젝트 설정/Docker

[Docker] Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (feat. ubuntu)

반응형

docker ps 를 했는데 아래와 같은 에러가 나왔다.

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

이 문제는 Docker Daemon(도커 데몬)과 연결이 안됬다는 말이다.

이는 Docker 소켓 파일이 존재하지 않거나 권한이 잘못 설정되었거나, Docker 데몬 자체의 문제일 수 있다고 한다.

나의 문제는 소켓 (네트워크) 문제여서,  iptables를 install 하여 해결하였으나 혹시 모르니

찾은 점검 및 살리는 방법을 적어보도록 한다.

 

docker 실행 여부 확인

실행되지 않았다면 에러가 난다. 실행부터 하자.

# 도커 서비스 상태 확인
sudo systemctl status docker.service
# 도커 시작
sudo systemctl start docker
# 도커 재시작
sudo systemctl restart docker.service

그래도 안된다면 일단 에러 로그를 보자.

에러 로그보기

journalctl -xe

# or

sudo journalctl -u docker.service

나의 에러 로그는 아래 처럼 나왔다.

systemd[1]: docker.socket: Failed with result 'service-start-limit-hit'.

 

iptables reinstall (★)

# iptables 설치
sudo apt install --reinstall iptables

# 도커 재시작
sudo systemctl restart docker.service

iptables?

iptables : 리눅스 시스템에서 사용되는 방화벽 프로그램.
Docker와 함께 사용될 때 Docker의 네트워크 기능을 제어하는 데 중요한 역할을 합니다.

더보기
iptables는 리눅스 기반 시스템에서 사용되는 방화벽 프로그램입니다.

이 프로그램은 네트워크 트래픽을 필터링하고, 패킷의 이동을 제어하며, 보안 정책을 적용하여 네트워크 보안을 유지합니다.

iptables는 룰 기반 방식으로 동작하며, 사용자가 미리 정의한 규칙을 기반으로 패킷을 필터링합니다.
이를 통해 네트워크 보안을 강화하고, 불필요한 트래픽을 차단하여 네트워크 성능을 최적화할 수 있습니다.

예를 들어, iptables를 사용하여 특정 IP 주소에서 오는 모든 패킷을 차단하거나, 특정 포트를 허용하는 등의 규칙을 정의할 수 있습니다. 또한, iptables는 포트 포워딩, NAT 등의 기능을 제공하여 네트워크 구성을 유연하게 조정할 수 있습니다.

iptables는 일반적으로 시스템 관리자나 네트워크 보안 전문가가 사용하는 도구입니다. iptables의 높은 유연성과 기능성으로 인해 다양한 네트워크 환경에서 사용되며, 다양한 오픈 소스 프로젝트에서도 사용되고 있습니다.

 

docker.sock 제거 or 권한주기

# docker.socket 제거
sudo rm /etc/systemd/system/docker.sock

sudo systemctl daemon-reload
sudo systemctl start docker

# docker.sock 권한 확인
ls -l /var/run/docker.sock
# 권한주기
sudo chmod 666 /var/run/docker.sock

주의사항

권한 변경시 유의 할점은 일반적으로 Docker 소켓 파일의 소유자와 그룹은 root이며, 권한은 srw-rw---- 또는 srw-rw-rw-입니다. 소켓 파일의 권한이 제대로 설정되어 있지 않은 경우, 다음 명령어를 사용하여 복구할 수 있습니다.

 

Docker 소켓 파일의 권한을 srw-rw-rw-로 변경하여 모든 사용자가 Docker 데몬과 통신할 수 있도록 합니다. 이후 Docker를 재시작하면 문제가 해결될 수 있습니다. 하지만 이 방법은 보안상의 이유로 권장되지 않으며, 권한을 666으로 변경하는 것은 시스템에 보안적인 취약점을 만들 수 있습니다. 따라서 가능하면 iptables를 포함하여 Docker와 관련된 다른 구성 요소들도 함께 검토하고 수정하는 것이 좋습니다.

 

docker.sock ?

docker.socket 파일은 Docker 서비스를 시작하기 전에 Docker 데몬과 통신하기 위한 Unix 소켓을 설정하는 역할을 합니다.

더보기
docker.socket 파일은 Docker 데몬을 실행하기 위한 systemd 유닛 파일 중 하나입니다.
systemd는 대부분의 리눅스 배포판에서 사용되는 init 시스템으로, 서비스의 시작, 정지 및 관리를 담당합니다.

docker.socket 파일은 Docker 서비스를 시작하기 전에 Docker 데몬과 통신하기 위한 Unix 소켓을 설정하는 역할을 합니다. 이 소켓은 Docker 클라이언트가 Docker 데몬과 통신할 수 있도록 합니다.

docker.socket 파일을 활성화하면 Docker 데몬이 시스템 부팅 시 자동으로 시작되며, Docker 클라이언트가 Docker 데몬에 연결할 때마다 docker.socket 파일이 사용됩니다.

예를 들어, docker run 명령을 실행하면 Docker 클라이언트는 Docker 데몬과 통신하고, 이를 통해 새로운 컨테이너를 생성합니다. 이때 docker.socket 파일이 사용되어 Docker 클라이언트와 Docker 데몬 사이의 통신을 중계합니다.
따라서 docker.socket 파일은 Docker 서비스를 실행하는 데 필수적인 파일 중 하나입니다.

 

dockerd

오류 메시지에 Docker 데몬 구성에 문제가 있음이 표시되면 sudo dockerd 명령을 실행해 보십시오. 이렇게 하면 포그라운드에서 Docker 데몬이 시작되고 생성된 오류 메시지가 표시됩니다.

 

도커 재인스톨

제일 마지막에 하자 마음이 아프다.

도커를 지우고 다시 인스톨해보자.

이미지를 push 등을 안해놨다만 다 날라간다. ㅠ

반응형