2017-03-01 94 views
0

我目前嘗試使用nginx作爲elasticsearch引擎的代理,所有這些都使用docker。 爲elasticsearch我運行命令如下:使用nginx作爲docker的代理

docker run --name elasticsearch_5.2.1 \ 
-d \ 
elasticsearch:5.2.1 

的一個nginx的:

docker run --name nginx_1.11.10 \ 
-p 8200:80 \ 
-l elasticsearch_5.2.1:elasticsearch \ 
-v /my.conf:/etc/nginx/nginx.conf:ro \ 
-d \ 
nginx:1.11.10 

我的nginx的配置是:

user nginx; 
worker_processes 1; 

error_log /var/log/nginx/error.log warn; 
pid  /var/run/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    upstream elasticsearch_proxy { 
     server elasticsearch:9200; 
    } 

    server { 
     listen 80; 

     location/{ 
      proxy_pass http://elasticsearch_proxy; 
      proxy_http_version 1.1; 
      proxy_set_header Connection "Keep-Alive"; 
      proxy_set_header Proxy-Connection "Keep-Alive"; 
     } 
    } 
} 

但是,當nginx的開始,我有此錯誤:

2017/03/01 23:45:47 [emerg] 1#1: host not found in upstream "elasticsearch:9200" in /etc/nginx/nginx.conf:15 
nginx: [emerg] host not found in upstream "elasticsearch:9200" in /etc/nginx/nginx.conf:15 

我明白,nginx無法找到與他的別名elasticsearch。但我找不到問題。

有沒有人已經有這個問題?

謝謝。

回答

2

您需要創建一個用戶網絡。

docker create network my_app 

然後在該網絡上運行這兩個容器。

docker run --name elasticsearch_5.2.1 \ 
-d --network my_app \ 
elasticsearch:5.2.1 

docker run --name nginx_1.11.10 \ 
-p 8200:80 \ 
-l elasticsearch_5.2.1:elasticsearch \ 
--network my_app \ 
-v /my.conf:/etc/nginx/nginx.conf:ro \ 
-d \ 
nginx:1.11.10 

那麼你應該能夠妥善解決的名字,好像他們是DNS名稱。

+2

'docker-compose'使這件事變得簡單。 – jkinkead

+0

不幸的是我得到了同樣的錯誤 –

+1

@OresteViron如果你告訴nginx.conf使用主機名'elasticsearch_5.2.1',該怎麼辦?或者在第一個容器上使用'--name elasticsearch'? –