docker port-forwarding
Dockerfile을 만들어서, elasticsearch를 설치하려고 한다. 그런데, 이상해게, 브라우저에서 http://localhost:9200을 호출하면 접속이 안된다. 왜 그럴까? Dockerfile은 아래와 같다.
docker 이미지 만들기
#vesrion 0.0.1
FROM ubuntu:16.04
MAINTAINER Gaurav Srivastava
#some_ important _library
RUN apt-get update && apt-get install wget build-essential gcc make -y
RUN apt-get install common-software-properties -y
#Install_JAVA
RUN apt-get install default-jdk -y
RUN apt-get install openjdk-8-jre -y
RUN apt-get update
RUN wget -O - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -
RUN echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
RUN apt-get update && apt-get install elasticsearch -y
RUN apt-get install git -y
RUN apt-get install python2.7 -y
RUN apt-get install vim -y
EXPOSE 9200
아래와 같이 docker image를 만들었다. run후 ps를 하면, 아래와 같이 9200포트가 port-forwarding을 잘되었다고 표시된다. 근데, 왜 안될까?
docker 이미지 빌드
# docker build –t ubuntu-elasticsearch .
# docker run -it -p 9200:9200 ubuntu-elasticsearch /bin/bash
# docker ps
ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ff3f51cc45f1 ubuntu-elasticsearch "/bin/bash" 40 seconds ago Up 40 seconds 0.0.0.0:9200->9200/tcp lucid_ritchie
Elasticsearch 실행
elasticsearch서버를 성공적으로 실행하고, host에서 http://localhost:9200해도 반응이 없다. 근데.. docker안에서는 curl이 잘 작동한다.
root# service elasticsearch start
* Starting Elasticsearch Server
root# curl http://localhost:9200
{
"name" : "Tech-Blog",
"cluster_name" : "linux-point- development ",
"cluster_uuid" : "huIY_z9fQnWhdUiQrqfyLA",
"version" : {
"number" : "2.4.5",
"build_hash" : "19c13d0",
"build_date" : "2017-07-18T20:44:24.823Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
해결법
원인은 0.0.0.0에 있었다. ㅎㅎ docker ps를 다시 해보면, port가 0.0.0.0:9200->9200이라는 표시가 있다. 이 표시는 docker안에서 0.0.0.0주소로 실행된 녀석만 port-forwarding해준다는 말이다. 지금 elaticsearch는 localhost(127.0.0.1) IP주소로 실행중이라서 안되는 것이다.
# docker ps
ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ff3f51cc45f1 ubuntu-elasticsearch "/bin/bash" 40 seconds ago Up 40 seconds 0.0.0.0:9200->9200/tcp lucid_ritchie
그럼 elasticsearch를 0.0.0.0주소로 실행해 보자. 환경설정파일의 bind_host=0.0.0.0으로 수정해보자. 그럼 잘될것 이다.
root# vi /etc/elasticsearch/elasticsearch.yml
# -------------- Network -------------------
# Set the bind address to a specific IP (IPv4 or IPv6):
network.bind_host: 0.0.0.0