2017-09-22 173 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

相关问题