Linux

네트워크를 Bridge로 설정한 VMware 내부에 Docker 서버 사용시 주의점

정확한 원인은 모르겠는데, 네트워크를 브릿지로 설정해준 vmware 우분투 내부에서 docker를 사용할시에 dns나 ip 설정이 제대로 되지 않아 apt-get를 비롯해 docker 서버 내부에서 외부와의 통신이 일체 안되는 문제가 발생한다. 

 

아마 도커 엔진은 내부아이피를 사용하는걸 상정하고 네트워크 설정을 진행하는데, 도커가 돌아가고 있는 우분투는 브릿지 모드에 맞춰 개별적인 ip를 할당받아 사용되기 때문인걸로 추정된다. 

 

따라서 , 해당 네트워크 환경 내에서 도커를 사용하려면 이미지와 컨테이너 빌드시부터 옵션을 좀 달리 해줘야한다. 

 

docker build --no-cache --network=host -t durumi .
docker run -it --net host --name durumi durumi /bin/bash

 

빌드시에는 기존 이미지의 캐시데이터를 사용하지 않고 새로 생성해줘 네트워크 설정을 싹 새로 시켜야 하고, network=host 옵션을 줘서 호스트와 동일한 네트워크 환경에서 이미지가 빌드되게끔 해준다.

 

run시에는 --net host  옵션을 이용해 docker 컨테이너의 네트워크 설정이 호스트와 동일하게 동작하게끔 지정해줘야한다. 도커 기본설정은 내부 ip 를 기준으로 설정되는데 브릿지모드로 설정된 호스트 네트워크 설정과 바인딩이 제대로 안되어 동작이 제대로 안되는 모양. 

 

추가로, 해당 도커 컨테이너에서 django를 사용할거라면 runserver시에도 ip 주소를 지정해주어야한다. 기본 설정은 루프백 아이피를 사용해서 서버가 돌아가는데, 이런경우에는 절대로 접근이 불가하다. 

 

python3 mysite/manage.py runserver 192.168.0.20:8000 

 

서버 실행시 호스트(vmware 호스트) 와 동일한 ip주소를 설정해서 실행해줘야 vm 호스트와 실제 물리 운영체제모두에서 접근이 가능해진다. 

 

vm->도커->django 세가지의 네트워크 설정을 모두 일관성 있게 해줘야 되는듯. 내부ip로 할꺼면 아예 nat로 해서 포트포워딩을 진행하고, 브릿지로 세팅할거면 셋 다 그에 맞게 해줘야된다. 

 

05.15 내용추가

위 내용은 nginx 를 비롯한 웹서버를 별도로 사용하지 않을때 이야기고, 

docker-compose를 이용해 nginx 를 묶어서 서버를 돌릴때는 저렇게 해줄필요가 없더라.