본문 바로가기
실무

[Docker/도커] Job for docker.service failed because the control process exited with error code 오류 해결 과정

2021. 11. 26.

최근 회사에서 팀을 옮기면서 도커(Docker)를 드디어 사용해보게 되었다. 말로만 많이 들었지 직접 사용해 보는 건 처음이라서 삽질이란 삽질은 다 하는 중이다.

오늘은 그중에서 아래 오류가 발생해서 여기저기 뒤져가며 겨우 해결한 과정을 적어보고자 한다. 나중에 또 삽질하지 않기 위해서!

Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

 

도커 데몬 실행 문제 발생

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

문제는 여기서부터 발생했다. 도커로 뭔가 작업을 해야 하는데 도커가 실행 중이지 않다는 것이다. 그럼 도커를 실행해보자.

$ sudo systemctl start docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
$ systemctl status docker.service
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2021-11-24 17:39:04 KST; 4s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
    Process: 5348 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
   Main PID: 5348 (code=exited, status=1/FAILURE)

11월 24 17:39:04 jungyeunwon-B365M-D3H systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
11월 24 17:39:04 jungyeunwon-B365M-D3H systemd[1]: Stopped Docker Application Container Engine.
11월 24 17:39:04 jungyeunwon-B365M-D3H systemd[1]: docker.service: Start request repeated too quickly.
11월 24 17:39:04 jungyeunwon-B365M-D3H systemd[1]: docker.service: Failed with result 'exit-code'.
11월 24 17:39:04 jungyeunwon-B365M-D3H systemd[1]: Failed to start Docker Application Container Engine.

도커를 실행하면 뭔가 에러가 발생해서 docker.service를 실행하는 작업이 실패했다고 한다. 시키는 대로 status를 살펴보니 Active: failed 상태인 걸 확인할 수 있었다.

그리고 아래를 쭉 읽어보면 아래에서 세 번째 줄에 Start request repeated too quickly.라는 문구가 있다. 너무 빠르게 재시작되었다고? 분명 도커가 running 상태가 아니라고 해서 다시 켜려고 하는 거라 이해가 안 됐다.

 

해결 과정 1 - 도커가 빠르게 재시작되지 않도록 하기

앞서 봤듯이 도커를 실행시킬 때 재시작되면서 뭔가 충돌이 일어나는 것 같았다. 구글링을 열심히 해보니 Restart 설정을 바꿔주면 된다고 한다.

$ vi /lib/systemd/system/docker.service

위 파일을 열어 Restart 설정을 Restart=no로 바꿔주었다(원래는 always로 설정되어 있었다). 이 설정을 변경하고 다시 도커 데몬을 실행하려고 하니 또 에러가 발생했다. 그래도 에러 메시지가 변경된 걸 보면 앞선 문제는 해결된 것 같다.

$ systemctl status docker.service
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Wed 2021-11-24 17:42:37 KST; 2s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
    Process: 5648 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
   Main PID: 5648 (code=exited, status=1/FAILURE)

11월 24 17:42:37 jungyeunwon-B365M-D3H systemd[1]: Starting Docker Application Container Engine...
11월 24 17:42:37 jungyeunwon-B365M-D3H dockerd[5648]: time="2021-11-24T17:42:37.811937480+09:00" level=info msg="Starting up"
11월 24 17:42:37 jungyeunwon-B365M-D3H dockerd[5648]: failed to start daemon: pid file found, ensure docker is not running or delete /var/run/docker.pid
11월 24 17:42:37 jungyeunwon-B365M-D3H systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
11월 24 17:42:37 jungyeunwon-B365M-D3H systemd[1]: docker.service: Failed with result 'exit-code'.
11월 24 17:42:37 jungyeunwon-B365M-D3H systemd[1]: Failed to start Docker Application Container Engine.

 

해결 과정 2 - 도커 프로세스 kill 및 재실행 성공

다음 문제는 failed to start daemon: pid file found, ensure docker is not running or delete /var/run/docker.pid 이 부분에서 해결의 실마리를 얻었다. 아무래도 이전에 도커가 비정상적으로 종료되어 프로세스가 완전히 죽지 않은 것 같다. 아래 커맨드를 입력해서 도커가 실행 중인지 확인해보자.

$ ps -ef | grep dockerd
root        3552    1545  0 17:30 ?        00:00:00 sudo dockerd
root        3553    3552  0 17:30 ?        00:00:07 dockerd
jungyeu+    5899    3698  0 17:43 pts/1    00:00:00 grep --color=auto dockerd

프로세스 3552번에서 dockerd (docker daemon)가 실행 중이다. 얼른 얘를 죽이고 다시 실행해보자.

$ sudo kill -9 3553
$ ps -ef | grep dockerd
jungyeu+    6141    3698  0 17:46 pts/1    00:00:00 grep --color=auto dockerd

$ sudo service docker start
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

드디어 도커가 정상적으로 실행되었다! 앞으로 계속 정상적으로 종료된다면 첫 번째 문제가 발생하지 않을 것 같아서, 해결 후에 Restart=always로 다시 변경하였다.

 

 

 

★광고 클릭은 큰 힘이 됩니다★

댓글