IT/CLOUD(AWS,Azure,GCP,Docker)

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

알콩달콩아빠 2022. 6. 19. 16:48
728x90
반응형

최근 회사에서 팀을 옮기면서 도커(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로 다시 변경하였다.

출처: https://dct-wonjung.tistory.com/entry/Docker-failed-control-process-exited-오류-해결 [꿈찾원:티스토리]

728x90
반응형