2 回答
TA贡献1982条经验 获得超2个赞
您遇到了问题,因为您错误地处理了 Elasticsearch。
内部 docker 容器127.0.0.1指的是容器本身,因此您的应用程序试图在没有容器的地方找到 Elasticsearch。
从另一个引用一个 docker 容器的正确方法是使用 docker 容器名称。因此,在您的情况下,它将使用 name: elasticsearch。
编辑:您的配置还有另一个问题。您错过了 Elasticsearch 配置的一些重要元素。
在这里,您有一个单节点 Elasticsearch 集群的最低配置片段。
services:
elasticsearch:
container_name: "elasticsearch"
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
environment:
- node.name=elasticsearch
- cluster.name=es-docker-cluster
- bootstrap.memory_lock=true
- cluster.initial_master_nodes=elasticsearch
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
我之前写的一切仍然有效。修改 docker-compose 后,您通过引用 Elasticsearch 的最后一个版本http://elasticsearch:9200应该可以正常工作。
编辑:
正如@David Maze 指出的那样,您的示例中存在第三个问题。而不是RUN go run server.go你应该有CMD go run server.go. 当您想在容器中运行您的应用程序时,您正在做的是在构建期间运行您的应用程序。
更传统的方法是构建应用程序,而不是复制源代码,将二进制文件复制到容器并在容器内运行二进制文件。在这里你有一些信息:https ://medium.com/travis-on-docker/multi-stage-docker-builds-for-creating-tiny-go-images-e0e1867efe5a
TA贡献1865条经验 获得超7个赞
所以上面用elasticsearch替换localhost的动作是正确的。但这只有在您使用 docker-compose 启动时才会发生。不要尝试使用 elasticsearch 而不是主机从 IDE 调用 elasticsearch。我建议让 elasticsearch 的主机可配置,本地配置保持 localhost,但您可以在 docker-compose 文件中覆盖它。
version: "3.5"
services:
elasticsearch:
container_name: "elasticsearch"
image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0
environment:
- node.name=elasticsearch
- cluster.name=es-docker-cluster
- bootstrap.memory_lock=true
- cluster.initial_master_nodes=elasticsearch
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
golang:
container_name: "golang"
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
restart: unless-stopped
depends_on:
- elasticsearch
environment:
- ELASTICSEARCH_HOST: elasticsearch
其中 ELASTICSEARCH_HOST 是您在项目中使用的变量
- 2 回答
- 0 关注
- 211 浏览
添加回答
举报