2017-09-22 174 views
0

我的Docker容器沒有問題。我試圖通過curl從容器訪問我的父服務器localhost,以便在elasticsearch中執行查詢。 Elastic僅在父服務器上的本地區域工作。Docker容器在父服務器中訪問本地主機

curl http://127.0.0.1:9200 
curl: (7) Failed to connect to 127.0.0.1 port 9200: Connection refused 

容器IP是172.17.0.3和Im能ping容器從父服務器

它我搬運工建立

cd ./api_docker 
    container="$(docker ps | grep "visitors/api:gniewoy" | cut -d " " -f1)" 
    git reset --hard HEAD && 
    git pull && 
    composer update && 
    docker build -t visitors/api:gniewoy . && 
    cd ../ 
    docker kill $container && 
    docker run -p 705:80 --env-file docker_api_env -d /etc/docker/ 

建成continer在端口705工作正常後,但只是彈性問題。 下面是deatils我conainer

"NetworkSettings": { 
      "Bridge": "", 
      "SandboxID": "", 
      "HairpinMode": false, 
      "LinkLocalIPv6Address": "", 
      "LinkLocalIPv6PrefixLen": 0, 
      "Ports": { 
       "443/tcp": null, 
       "80/tcp": [ 
        { 
         "HostIp": "0.0.0.0", 
         "HostPort": "705" 
        } 
       ] 
      }, 
      "SandboxKey": "", 
      "SecondaryIPAddresses": null, 
      "SecondaryIPv6Addresses": null, 
      "EndpointID": "", 
      "Gateway": "172.17.0.1", 
      "GlobalIPv6Address": "", 
      "GlobalIPv6PrefixLen": 0, 
      "IPAddress": "172.17.0.3", 
      "IPPrefixLen": 16, 
      "IPv6Gateway": "", 
      "MacAddress": "", 
      "Networks": { 
       "bridge": { 
        "IPAMConfig": null, 
        "Links": null, 
        "Aliases": null, 
        "NetworkID": "", 
        "EndpointID": "", 
        "Gateway": "172.17.0.1", 
        "IPAddress": "172.17.0.3", 
        "IPPrefixLen": 16, 
        "IPv6Gateway": "", 
        "GlobalIPv6Address": "", 
        "GlobalIPv6PrefixLen": 0, 
        "MacAddress": "" 
       } 
      } 
     } 

林OD的Debian 8.工作謝謝

+0

在所有接口(0.0.0.0)彈性聽,或者只在迴環(127.0.0.1)? – BMitch

+0

彈性只在127.0.0.1 – gniewoj

回答

0

您需要通過-p標籤的東西共享端口像-p 9200:9200

這裏先9200是內部端口和第二個是貨櫃港。

看看this

+0

我建的容器共享端口9200,但是當我嘗試運行彈性,然後是一些問題'線程中的異常「主」BindHttpException [無法綁定到[9200]];'。彈性無法運行,因爲端口9200已在使用 – gniewoj

0

只有這樣,才能在主機上實現環回是要在它的同回網絡。默認情況下,docker將在自己的獨立網絡命名空間中運行你的容器,其中包括它自己的單獨的回送接口。與主機的迴環(和主機的網絡協議棧的其餘部分)運行,你會打電話:

docker run --net host ... 

隨着泊塢窗,compose.yml,你將包括對有關服務的以下部分:

network_mode: "host" 

如果您可以配置您的彈性服務器以偵聽所有接口,那麼從容器方面來看會更好(儘管這可能會引入其他安全問題)。然後,您將從容器中連接到主機上的非回送ip。

0

您的配置必須/etc/elasticsearch/elasticsearch.yml

network : 
    host : 127.0.0.1 //or ifconfig (ex eth0 : IP) 
+0

我試過這樣,但仍然是彈性在碼頭集裝箱中無法訪問。我甚至嘗試使用主機作爲碼頭IP 172.17.0.3。以及我使用'network.bind_host:127.0.0.1 //或172.17.0.3' – gniewoj

+0

@gniewoj你需要改變你的配置logstash配置來放彈性搜索而不是127.0.0.1這個問題(docker-elastic ..)在這裏解決:https://github.com/docker-library/logstash/issues/85 https://stackoverflow.com/questions/43824750/elasticsearch-unreachable-connection-refused – 2017-09-23 08:58:06

相關問題