Docker容器连接问题

时间:2018-01-19 08:42:06

标签: docker elasticsearch

我有两个容器。其中一个是我的应用程序,另一个是ElasticSearch-5.5.3。我的应用程序需要连接到ES容器。但是,我总是得到"连接被拒绝"

我使用静态端口运行我的应用程序:

docker run -i -p 9000:9000 .....

我使用静态端口运行ES:

docker run -i -p 9200:9200 .....

如何连接它们?

3 个答案:

答案 0 :(得分:0)

您需要使用--links

链接两个容器
  1. 使用名称es -

    启动ES容器

    $ docker run --name es -d -p 9200:9200 .....

  2. 使用--links -

    启动应用程序容器

    $ docker run --name app --links es:es -d -p 9000:9000 .....

  3. 这就是全部。您应该能够从应用程序容器es访问主机名为app的ES容器。

    从应用程序容器内部尝试 - curl -I http://es:9200/&您应该能够访问在es容器中运行的ES服务。

    参考 - https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/#communication-across-links

答案 1 :(得分:0)

我建议使用以下方法之一:

1)使用docker links将您的容器链接在一起。

2)使用docker-compose来运行容器。

解决方案1被视为已弃用,但可能更容易上手。

首先,运行您的elasticsearch容器,使用--name=<your chosen name>标志为其命名。

然后,运行您的应用程序容器添加--link <your chosen name>:<your chosen name>

然后,您可以使用<your chosen name>作为主机名从应用程序连接到弹性搜索。

答案 2 :(得分:0)

您的容器上是否设置了--network?如果它们都在同一--network,它们可以通过该网络相互通信。因此,在下面的示例中,myapplication容器会在其连接字符串中引用http://elasticsearch:9200以发布到Elasticsearch。

docker run --name elasticsearch -p 9200:9200 --network=my_network -d elasticsearch:5.5.3

docker run --name myapplication --network=my_network -d myapplication

在此处详细了解Docker网络:https://docs.docker.com/engine/userguide/networking/