登录
首页 >  Golang >  Go问答

Go 服务器无法连接到 Docker 中的 Elasticsearch

来源:stackoverflow

时间:2024-03-22 14:52:32 365浏览 收藏

今天golang学习网给大家带来了《Go 服务器无法连接到 Docker 中的 Elasticsearch》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我今天设置了一个运行 golang:1.13-alpine 映像的环境,以及 elasticsearch 和 kibana 的最新映像。

从我的本地计算机访问时,elasticsearch 和 kibana 运行良好,但我无法通过 go 服务器连接到 elasticsearch。我根据我找到并遵循的指南将其组合在一起。

我对 docker 的使用还是有点陌生​​。我知道我指向了容器中错误的 ip 地址,但我不确定如何修复它。希望有人能引导我走向正确的方向。

docker-compose.yml:

version: "3.7"

services:
  web:
    image: go-docker-webserver
    build: .
    ports:
      - "8080:8080"

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
    environment:
      node.name: elasticsearch
      cluster.initial_master_nodes: elasticsearch
      cluster.name: docker-cluster
      bootstrap.memory_lock: "true"
      es_java_opts: -xms256m -xmx256m
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"

  kibana:
    image: docker.elastic.co/kibana/kibana:7.4.2
    ports:
      - "5601:5601"
    links:
      - elasticsearch

dockefile:

from golang:1.13-alpine as builder

run apk add --no-cache --virtual .build-deps \
    bash \
    gcc \
    git \
    musl-dev

run mkdir build
copy . /build
workdir /build

run go get
run cgo_enabled=0 goos=linux go build -a -installsuffix cgo -ldflags '-extldflags "-static"' -o webserver .
run adduser -s -d -h -h /build webserver
user webserver

from scratch
copy --from=builder /build/webserver /app/
workdir /app
expose 8080
expose 9200
cmd ["./webserver"]

ma​​in.go

func webserver(logger *log.logger) *http.server {
    router := http.newservemux()
    router.handlefunc("/", func(w http.responsewriter, r *http.request) {

        es, err := elasticsearch.newdefaultclient()
        if err != nil {
            log.fatalf("error creating the client: %s", err)
        }

        res, err := es.info()
        if err != nil {
            log.fatalf("error getting response: %s", err)
        }

        log.println(res)
    })

    return &http.server{
        addr:         listenaddr,
        handler:      router,
        errorlog:     logger,
        readtimeout:  5 * time.second,
        writetimeout: 10 * time.second,
        idletimeout:  15 * time.second,
    }
}

当我启动服务器时,一切运行正常,我可以访问 kibana 并查询已索引的数据,但是一旦我在 postman 中点击 localhost:8080,服务器就会崩溃并输出:

web_1            | 2019/11/26 16:40:40 Error getting response: dial tcp 127.0.0.1:9200: connect: connection refused
go-api_web_1 exited with code 1

解决方案


您可以在 docker-compose 文件中将网络作为网桥提及并验证一次,它是如何工作的。

version: "3.7"

services:
  web:
    image: go-docker-webserver
    build: .
    ports:
      - "8080:8080"
    networks:
      - elastic

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
    environment:
      node.name: elasticsearch
      cluster.initial_master_nodes: elasticsearch
      cluster.name: docker-cluster
      bootstrap.memory_lock: "true"
      es_java_opts: -xms256m -xmx256m
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"
    networks:
      - elastic

  kibana:
    image: docker.elastic.co/kibana/kibana:7.4.2
    ports:
      - "5601:5601"
    links:
      - elasticsearch
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

将内核设置设置为 262144:

sysctl -w vm.max_map_count=262144

好了,本文到此结束,带大家了解了《Go 服务器无法连接到 Docker 中的 Elasticsearch》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>