docker elasticsearch容器不转发端口(macOs)

 黯嘫吢碎1984rv 发布于 2022-12-28 10:48

我有一个容器设置来运行elasticsearch.服务启动但我无法通过curl或浏览器连接到它.

 RUN \
 cd /tmp && \
 wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-  1.3.2.tar.gz && \
 tar xvzf elasticsearch-1.3.2.tar.gz && \
 rm -f elasticsearch-1.3.2.tar.gz && \
 mv /tmp/elasticsearch-1.3.2 /elasticsearch

 # Define mountable directories.
 VOLUME ["/data"]

 # Define default command.
  CMD ["/elasticsearch/bin/elasticsearch"]

 EXPOSE 9200
 EXPOSE 9300

连接不http://localhost:9200产生任何结果.docker ps显示端口;

 0.0.0.0:49179->9200/tcp, 0.0.0.0:49180->9300/tcp
 ...
 net::ERR_ADDRESS_UNREACHABLE

我错过了一些配置值吗?谢谢!

[更新]我也在run命令中尝试了-p

 docker run -i -p 9200:9200 -p 9300:9300 -t --rm -P team1/image1

小智.. 15

如果您在OSX上运行docker,请注意主机实际上是初始化boot2docker时安装的VirtualBox实例.所以在这种情况下,而不是使用:

curl http://localhost:9200

找到虚拟盒实例的IP,我将其称为VM_IP:

boot2docker ip

然后尝试:

curl http://:9200

3 个回答
  • 如果您在OSX上运行docker,请注意主机实际上是初始化boot2docker时安装的VirtualBox实例.所以在这种情况下,而不是使用:

    curl http://localhost:9200

    找到虚拟盒实例的IP,我将其称为VM_IP:

    boot2docker ip

    然后尝试:

    curl http://<VM_IP>:9200

    2022-12-28 10:50 回答
  • 在docker容器中运行Elasticsearch时,我遇到了端口转发问题.我通过手动指定绑定Elasticsearch服务器的接口解决了这个问题docker run --rm -p 9200:9200 -p 9300:9300 --name=es elasticsearch:latest -Des.network.host=0.0.0.0.

    绑定部分是-Des.network.host=0.0.0.0最后的部分.我在https://mad.is/2016/09/running-elasticsearch-in-docker-container/写了一篇博文,详细说明了这一点.

    2022-12-28 10:52 回答
  • 我测试了你的Dockerfile,但它确实有效.

    FROM dockerfile/java
    RUN \
      cd /tmp && \
      wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.tar.gz && \
      tar xvzf elasticsearch-1.3.2.tar.gz && \
      rm -f elasticsearch-1.3.2.tar.gz && \
      mv /tmp/elasticsearch-1.3.2 /elasticsearch
    # Define mountable directories.                                                                                    
    VOLUME ["/data"]
    # Define default command.                                                                                          
    CMD ["/elasticsearch/bin/elasticsearch"]
    EXPOSE 9200
    EXPOSE 9300
    

    我尝试构建这个Dockerfile并运行它.

    $ docker build -t 25312935 .
    $ docker run -t -p 9200:9200 -p 9300:9300 --rm 25312935
    [2014-08-15 04:41:08,349][INFO ][node                     ] [Black Crow] version[1.3.2], pid[1], build[dee175d/2014-08-13T14:29:30Z]
    [2014-08-15 04:41:08,349][INFO ][node                     ] [Black Crow] initializing ...
    [2014-08-15 04:41:08,353][INFO ][plugins                  ] [Black Crow] loaded [], sites []
    [2014-08-15 04:41:10,444][INFO ][node                     ] [Black Crow] initialized
    [2014-08-15 04:41:10,444][INFO ][node                     ] [Black Crow] starting ...
    [2014-08-15 04:41:10,547][INFO ][transport                ] [Black Crow] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/172.17.0.72:9300]}
    [2014-08-15 04:41:10,560][INFO ][discovery                ] [Black Crow] elasticsearch/0mpczYoYSZCiAmbkxcsfpg
    [2014-08-15 04:41:13,601][INFO ][cluster.service          ] [Black Crow] new_master [Black Crow][0mpczYoYSZCiAmbkxcsfpg][eeb3396b1ecc][inet[/172.17.0.72:9300]], reason: zen-disco-join (elected_as_master)
    [2014-08-15 04:41:13,615][INFO ][http                     ] [Black Crow] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/172.17.0.72:9200]}
    [2014-08-15 04:41:13,615][INFO ][node                     ] [Black Crow] started
    [2014-08-15 04:41:13,634][INFO ][gateway                  ] [Black Crow] recovered [0] indices into cluster_state
    

    如下所示,request 127.0.0.1:9200返回json响应.

    $ curl 127.0.0.1:9200
    {
      "status" : 200,
      "name" : "Black Crow",
      "version" : {
    "number" : "1.3.2",
      },
      "tagline" : "You Know, for Search"
    }
    

    检查你的-p选择.这意味着将容器的端口公开给主机.如果您没有明确写入主机端口,则docker会像下面一样分配随机端口.

    $ docker run -t -p 9200 -p 9300 --rm 25312935
    $ docker ps -l
    CONTAINER ID        IMAGE                COMMAND                CREATED             STATUS              PORTS                                              NAMES
    1aa4c2c84d04        25312935:latest      /elasticsearch/bin/e   15 seconds ago      Up 15 seconds       0.0.0.0:49153->9200/tcp, 0.0.0.0:49154->9300/tcp   sad_shockley
    

    0.0.0.0:49153->9200/tcp 意味着您可以通过主机的49153端口访问容器的9200端口.

    $ curl 127.0.0.1:49153
    {
      "status" : 200,
      "name" : "Golem",
      "version" : {
    "number" : "1.3.2",
      },
      "tagline" : "You Know, for Search"
    }
    

    所以如果你想使用主机s 9200 port, explicitly write the host port like-p 9200:9200 or-p 0.0.0.0:9200:9200`

    $ docker ps -l
    CONTAINER ID        IMAGE                COMMAND                CREATED             STATUS              PORTS                                            NAMES
    eeb3396b1ecc        25312935:latest      /elasticsearch/bin/e   59 seconds ago      Up 58 seconds       0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   high_elion
    

    如果仍然无效,请尝试--net=host选项.您可以使用此选项在容器内使用主机网络堆栈.

    $ docker run -t --net=host --rm 25312935
    $ curl 127.0.0.1:9200
    {
      "status" : 200,
      "name" : "Black Crow",
      "version" : {
    "number" : "1.3.2",
      },
      "tagline" : "You Know, for Search"
    }
    

    如果两者都不起作用,我认为您需要检查其他网络配置.

    2022-12-28 10:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有