Ubuntu에서 Docker설정을 하고 root계정이나 root권한이 부여된 계정에서 search나 pull요 청이 안되는 경우가 있다. 이 때에는 크게 3가지를 확인해봐야하는데 그 상황은 아래와 같다.
- 현재 우분투가 네트워크가 활성화 되어있는가? (ping 8.8.8.8 or firefox를 실행시켜 확인) => 가상환경 VMware에서
- docker가 현재 실행되고 있는가 (sudo systemctl stauts docker)
- DNS설정이 되어 있는가? (sudo nano /etc/systemd/resolved.conf)
1. 우분투의 네트워크가 활성화 되어있지 않은 경우
만약 파이어폭스를 실행하더라도 반응이 없거나 ping요청에서 반응이 없다면 네트워크 장치나 설정에 문제가 있다는 뜻이다. 우리가 하이퍼바이저로 설정한 vmware은 네트워크 환경을 NAT(Network Access Translation), Bridged, Host-Only로 설정할 수 있다.
Host-Only, Nat, Bridge차이점 https://developerin.tistory.com/18
기존에 설정되어있는 네트워크 설정을 NAT에서 Bridged, Bridged에서 NAT으로 변경해보고 시도해보면 대다수의 환경에서 네트워크 문제는 해결할 수 있다. (해결이 안된다면 하이퍼바이저를 실행한 환경에서 네트워크 문제가 있거나, vmware에 네트워크가 꺼져있을수도 있다.)
2. docker가 현재 실행되고 있지 않은 경우
sudo systemctl stauts docker 를통해서 확인해봤을때 Docker가 실행이 되고있지 않다면 "sudo systemctl start docker" 명령어를 통해 실행시켜주면 된다. 혹은 이미 실행되어있지만 환경이 바뀜으로 인해 오류가 발생했을 수도 있다. 그때에는 재실행명령어 "sudo systemctl restart docker" 를 작성해주면 된다.
3. 이 모든 설정을 했지만 docker hub와 관련된 기능이 안된다면?
Error response from daemon: Get "https://index.docker.to/v1/search?q=nginx&n=25" : dial tcp: lookup index. docker.lo on 127.0.0.53:53: server misbehaving
오류 메세지를 다시 보면 docker명령어를 통해 index.docker.lo 라는 주소에 요청을 했지만 받을 수 없다고 한다. 웹의 생태계에서 각각의 서버의 위치는 ip주소로 명시되어있고 그것을 우리가 알아보기 쉽게 영어로 처리한것이 Domain Name Service, 즉 DNS이다. DNS서버에 요청주소가 영어로 들어왔을때 그것을 ip주소로 변경해주는데 우선 우리는 어느 DNS서버에 해당 주소를 보낼지 설정해 줘야만 그 주소안에 저장된 도메인 네임에 맞춰 ip주소를 반환, 해당 서버에 접속할 수 있게된다. 즉 DNS서버가 설정되어있지 않다면 우리가 아무리 영어로된 주소로 요청을 하더라도 네트워크에서는 해당 주소를 찾을 수 없게 된다.
ubuntu에서 네트워크 설정은 etc/systemd/resolved.conf 파일에 보관되어 있기에 우리는 해당 파일을 수정해 주면 된다.
1. sudo nano /etc/systemd/resolved.conf 명령어로 resolved.conf 파일 편집
해당 파일에서 DNS에 위치한곳에 Google Public DNS(8.8.8.8 8.8.4.4) 를 추가해준다. 그리고 ctrl+O, ctrl+x를 통해 저장및 종료를 해준다.
2. 편집된 내용 적용
이후 "sudo systemctl restart systemd-resolved" 명령어를 통해 변경된 내용을 적용시켜 재실행시켜주면 된다. 추가로 "sudo systemctl restart docker" 명령어를 통해 Docker도 다시 실행시켜주면 된다. 이후 정상적으로 docker pull, docker search 명령어로 docker hub와 관련된 기능이 정상적으로 실행되는것을 확인 할 수 있다.
첫댓글 고마워요