Docker 시작 오류: failed to load listeners, no sockets found via socket activation 해결

Docker 서비스를 시작했는데 다음 오류와 함께 dockerd가 종료될 수 있습니다.

failed to load listeners: no sockets found via socket activation

이 오류는 대개 dockerd-H fd:// 옵션으로 시작됐지만, systemd의 docker.socket으로부터 전달받은 소켓이 없을 때 발생합니다.

핵심 요약
docker.service만 보지 말고 docker.socket 상태를 함께 확인합니다. 패키지 기본 서비스가 fd://를 사용한다면 docker.socket을 활성화한 뒤 Docker 서비스를 다시 시작하는 것이 우선입니다.

1. 오류가 의미하는 것

Linux의 systemd는 서비스가 직접 소켓을 열게 하는 대신, 별도 .socket 유닛이 먼저 소켓을 열고 서비스에 전달하는 방식을 지원합니다.

Docker 서비스의 실행 옵션에 다음이 포함돼 있다면 socket activation을 사용한다는 뜻입니다.

-H fd://

이 상태에서 dockerd가 systemd를 통하지 않고 직접 실행되거나, docker.socket이 비활성화돼 있으면 전달받을 파일 디스크립터가 없어 시작에 실패할 수 있습니다.

2. docker.service와 docker.socket 상태 확인

두 유닛을 한 번에 확인합니다.

sudo systemctl status docker.service docker.socket

간단한 활성 상태만 확인하려면 다음을 사용합니다.

systemctl is-active docker.service
systemctl is-active docker.socket

최근 오류 로그도 함께 봅니다.

sudo journalctl \
  -u docker.service \
  -u docker.socket \
  --no-pager \
  -n 100

다음과 같은 조합이면 이 글의 해결 방법이 적용될 가능성이 큽니다.

docker.service: failed
docker.socket: inactive 또는 failed
dockerd 실행 옵션: -H fd://

3. socket activation 복구

먼저 socket 유닛을 활성화하고 시작합니다.

sudo systemctl enable --now docker.socket

그다음 Docker 서비스를 다시 시작합니다.

sudo systemctl restart docker.service

상태를 다시 확인합니다.

sudo systemctl status docker.socket docker.service

Docker가 부팅 시 자동으로 시작되도록 함께 설정하려면 다음을 실행합니다.

sudo systemctl enable docker.service

4. dockerd를 직접 실행한 경우

다음처럼 직접 실행하면 systemd가 소켓을 전달하지 않으므로 fd://에서 실패할 수 있습니다.

sudo dockerd -H fd://

패키지로 설치된 일반적인 환경에서는 직접 dockerd를 실행하기보다 systemd 서비스를 사용합니다.

sudo systemctl start docker

직접 실행이 꼭 필요한 테스트라면 명시적인 Unix socket을 지정할 수 있습니다.

sudo dockerd -H unix:///var/run/docker.sock

다만 운영 설정을 임시 명령으로 바꾸기 전에 기존 systemd 서비스와 /etc/docker/daemon.json 구성을 먼저 확인해야 합니다.

5. 서비스 정의와 override 확인

Docker 서비스가 실제로 어떤 옵션으로 시작되는지 확인합니다.

systemctl cat docker.service

ExecStart에서 다음과 비슷한 부분을 찾습니다.

ExecStart=/usr/bin/dockerd -H fd:// ...

사용자 정의 override가 있는지도 확인합니다.

systemctl show docker.service \
  -p FragmentPath \
  -p DropInPaths

override를 수정했다면 systemd 설정을 다시 읽고 서비스를 재시작합니다.

sudo systemctl daemon-reload
sudo systemctl restart docker

daemon.jsonhosts 설정과 systemd의 -H 옵션을 동시에 설정하면 충돌할 수 있으므로 둘을 함께 점검합니다.

sudo cat /etc/docker/daemon.json

파일이 없다면 오류가 아니라 기본 설정을 사용하는 상태일 수 있습니다.

6. 정상 동작 검증

서비스와 소켓을 확인합니다.

systemctl is-active docker.socket
systemctl is-active docker.service

정상 기대값은 모두 다음입니다.

active

Docker CLI 연결을 확인합니다.

docker version
docker ps

소켓도 확인합니다.

ls -l /var/run/docker.sock

서비스는 정상인데 일반 사용자에게 permission denied가 발생한다면 socket activation이 아니라 사용자 그룹 권한 문제일 수 있습니다.

원인별 빠른 정리

증상 가능성이 높은 원인 조치
no sockets found via socket activation docker.socket 비활성 sudo systemctl enable --now docker.socket
직접 실행한 dockerd -H fd:// 실패 systemd가 FD를 전달하지 않음 systemd 서비스 사용
service 재시작 후에도 실패 override 또는 daemon.json 충돌 systemctl cat, DropInPaths 확인
Docker 서비스는 active, CLI는 permission denied 사용자 소켓 권한 문제 docker 그룹과 세션 확인

검증일: 2026-07-11

공식 참고 자료