개발자의뇌

docker vsftpd 설치/사용 시 유의점 본문

개발/docker

docker vsftpd 설치/사용 시 유의점

devbrain 2019. 6. 3. 17:28

CentOS 7 에서 vsftpd 사용시 docker-compose 실행이 지연되는 현상을 발견했다.

 

하여 docker-compose --verbose  명령으로 확인해 보았더니 아래와 같은 로그가 보인다.

 

 

urllib3.connectionpool._make_request: http://localhost:None "POST /v1.22/networks/vsftpd_default/disconnect HTTP/1.1" 200 0
compose.cli.verbose_proxy.proxy_callable: docker disconnect_container_from_network -> None
compose.cli.verbose_proxy.proxy_callable: docker connect_container_to_network <- ('412fdc941680cbe260c07a5f9164650eefd93514edcef0ac33530b5a68c0c220', 'vsftpd_default', aliases=['vsftpd-tbo', '412fdc941680'], ipv4_address=None, ipv6_address=None, links=[], link_local_ips=None)
urllib3.connectionpool._make_request: http://localhost:None "POST /v1.22/networks/vsftpd_default/connect HTTP/1.1" 200 0
compose.cli.verbose_proxy.proxy_callable: docker connect_container_to_network -> None
compose.cli.verbose_proxy.proxy_callable: docker start <- ('412fdc941680cbe260c07a5f9164650eefd93514edcef0ac33530b5a68c0c220')
compose.parallel.feed_queue: Pending: set()
compose.parallel.feed_queue: Pending: set()
compose.parallel.feed_queue: Pending: set()

... 이 메시지가 계속 올라가면서 결국 docker-compose time out 이 걸린다.

 

 

혹시나 하여 ps 에서 docker 로 검색해 봤더니 아래와 같이 docker-proxy 가 무진장 많이 뜬 걸 확인하였다.

 

root      49513  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30010 -container-ip 172.18.0.2 -container-port 300xxxxxxx 엄청 많이 등록됨.
root      49527  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30009 -container-ip 172.18.0.2 -container-port 30009
root      49541  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30008 -container-ip 172.18.0.2 -container-port 30008
root      49555  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30007 -container-ip 172.18.0.2 -container-port 30007
root      49569  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30006 -container-ip 172.18.0.2 -container-port 30006
root      49583  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30005 -container-ip 172.18.0.2 -container-port 30005
root      49597  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30004 -container-ip 172.18.0.2 -container-port 30004
root      49609  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30003 -container-ip 172.18.0.2 -container-port 30003
root      49623  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30002 -container-ip 172.18.0.2 -container-port 30002
root      49637  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30001 -container-ip 172.18.0.2 -container-port 30001
root      49651  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 30000 -container-ip 172.18.0.2 -container-port 30000
root      49665  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 21 -container-ip 172.18.0.2 -container-port 21
root      49679  49203  0 20:10 ?        00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 20 -container-ip 172.18.0.2 -container-port 20

 

 

원인을 분석해 보니 vsftpd pasv 모드로 열 때 포트 range 를 등록해 주는데 9999의 포트를 등록하였다.

 

이럴 경우 docker-compose 는 docker-proxy 로 포트 range를 전부 열어주는 것 같다.

 

compose.parallel.feed_queue: Pending: set() 명령이 docke-proxy 를 설정하는 중인것 같고 

 

즉 9999의 포트를 docker-proxy 로 열기 위해 9999개의 프로세스를 등록하느라 시간이 걸리고

 

해당 프로세스를 다 열기 전에 docker-compose가 time out 걸린다.

 

실제 상용 서비스에 vsftp 설정이 지저분하게 들어가는 것이 싫어서 docker을 사용하려 했지만 

 

만약 서버가 재시작 되거나 도커가 다시 올라올 때 마다 저렇게 포트를 하나하나 열고 있는 경우 

 

상용 서비스 품질에 영향이 있을 것이다.

 

 

docker의 포트 오픈은 포트 범위가 클 수록 도커 실행 시간을 오래 점유한다.

 

관련 내용들을 찾아보았더니 docker 1.7 버전부터는 docker-proxy 를 disable 할 수 있도록 하였다.

 

# CentOS 7 / docker-proxy 실행 disable 하기 

vi /etc/docker/daemon.json 
{
    "userland-proxy": false
}

 

# docker 재시작

systemctl restart docker

 

 

docker-proxy 관련 내용은 아래 자세히 설명해 놓은 글이 있어서 남긴다.

 

https://bluese05.tistory.com/53

 

 

Comments