목차
개요
위와 같은 현상은 도커를 실행했을때 일어났다. 도커가 실행이 되지 않아서 발생하는 오류이다.
또한 에러 코드를 읽어보면 실행환경 내의 도커 실행 소켓과의 연결이 되지 않았다. 도커 데몬이 실행되고 있는것이 맞냐? 라고 물어보고 있다.
이 코드를 실행시켜보자
sudo systemctl status docker
그럼 아래와 같은 오류가 발생한다면 이 포스팅을 통하여 해결이 가능하다.
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
systemctl이 시스템 데몬의 도구이고 시스템 데몬의 상태를 확인 하였을때 has not been booted라는 메세지가 떴기 때문에
wsl 위에 설치된 ubuntu 등 리눅스 기반 환경에서 시스템 데몬이 작동하지 않는다는 사실을 확인 가능하다.
이 포스팅은 도커 공식 홈페이지 + StackOverFlow 등 해외 해결 사례를 해석한 포스팅이다.
https://docs.docker.com/engine/install/ubuntu/
원인
systemctl 이 wsl2 기반 ubuntu 에서 도커를 실행하기 위한 버스에 연결이 되지 않는 현상 = systemd에서 문제가 있다.
1. 설치된 wsl의 버전이 systemd 를 지원하지 않고 있기 때문일수도 있다. (wsl 업데이트 요망)
윈도우 10 버전 유저 중에 KB5020030 이후의 버전과 윈도우 11은 이러한 에러현상이 없다.
2. 최근 wsl 버전은 systemd를 지원하고 default 값으로 이의 사용이 보안상의 문제+쓸데없는 백그라운드 실행 프로세스들로 인해서 자동실행이 꺼져있다.
2-1 (해결방법): 기본값으로 false 이기에 True 로 바꾸어주어야한다.
2-2(해결방법): 기본값을 True로 변경하고 싶지 않거나 변경해도 적용이 되지 않는다면 systemd의 데몬 실행 wrapper script를 이용하여 init.d 폴더에서 docker 데몬을 찾아서 실행시켜주자.
두 방법 다 해결이 안된다면 1번의 wsl 업데이트를 진행시켜보자
해결 방법
1 . wsl 실행시 자동적으로 systemd = true 옵션을 추가하여 부팅한다
sudo -e /etc/wsl.conf
[boot]
systemd=true
이후에 wsl 을 재부팅하면 이후부터 systemd 가 항상 적용되게된다.
sudo systemctl status
위와 같은 코드로 시스템데몬의 컨트롤도구의 상태를 통해 정상적으로 systemd가 on 되었는지 확인이 가능하다.
하지만 위와같은 방법을 실행하고도 아래와 같이 operate가 불가하고 Host가 down 되었다는 표시가 나오면 아래와 같은 방법을 시도해보자.
현재 systemd를 항상 켜놓지 못하여서 도커 실행을 위한 버스를 찾지 못하는 상황인데 그럼 도커를 실행 할때 마다 sudo 권한을 가지고 systemd에서 run을 하는 기능의 wrapper script를 이용하여 도커를 실행시켜 주는 방법이 있다. (systemd가 실행되지 않을 경우)
systemd가 wsl 에 적용되기 이전의 init 프로세스를 이용하여 init.d 폴더 내의 도커 데몬을 sudo 를 이용하여 실행을 시켜줄수 있다.
sudo /etc/init.d/docker start
그럼 정상적으로 Docker가 실행되었다는 사실과 docker version 을 통하여 Client와 Server의 각각 도커 엔진이 실행되었음을 확인 할 수 있다.
'Docker' 카테고리의 다른 글
튜토리얼(3) Docker Hub를 통해서 이미지 배포, 다른 환경에서 실행 (0) | 2023.01.19 |
---|---|
튜토리얼(2) 도커 이미지 업데이트, 도커 배포 삭제 (0) | 2023.01.17 |
튜토리얼(1) Dockerfile 생성, 컨테이너 이미지 만들기 (0) | 2023.01.16 |
튜토리얼(0) Ubuntu 환경에 도커 설치하기 (0) | 2023.01.09 |
Docker : 공부를 시작하면서 (0) | 2023.01.09 |