使用nginx作为docker的代理

我目前尝试使用nginx作为elasticsearch引擎的代理,全部使用docker。 我的elasticsearch的运行命令如下:

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 

而我的nginxconfiguration是:

 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不能用他的别名findelasticsearch。 但我找不到问题。

有人已经有这个问题吗?

谢谢。

您需要创build一个用户networking。

 docker create network my_app 

然后在该networking上运行这两个容器。

 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 

那么你应该能够正确parsing名称,就好像它们是DNS名字一样。