我正在使用localstack在端口4566上运行lambdas,如下图所示
version: "2.1"
services:
localstack:
image: "localstack/localstack"
container_name: "localstack"
ports:
- "4566-4620:4566-4620"
- "127.0.0.1:8055:8080"
environment:
- SERVICES=s3,es,dynamodb,apigateway,lambda,sns,sqs,sloudformation
- DEBUG=1
- EDGE_PORT=4566
- DATA_DIR=/var/lib/localstack/data
- DOCKER_HOST=unix:///var/run/docker.sock
- HOST_TMP_FOLDER=${TMPDIR}
- LAMBDA_EXECUTOR=docker
- DYNAMODB_SHARE_DB=1
- DISABLE_CORS_CHECKS=1
- AWS_DDB_ENDPOINT=http://localhost:4566
volumes:
- "${TMPDIR:-/var/lib/localstack}:/var/lib/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
- "local"
elasticsearch:
container_name: tqd-elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
# volumes:
# - esdata:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
depends_on:
- "localstack"
logging:
driver: none
ports:
- 9300:9300
- 9200:9200
networks:
- "local"
networks:
local:
driver: "bridge"
- 问题:从lambda调用elasticsearch时没有得到任何响应**这是我的lambda代码
x一个一个一个一个x一个一个二个x
在此之后,即使我转到bash
并验证是否已创建此索引,它也会返回空索引集,即未创建任何索引
- 但是**,相同的代码工作正常,即从httpserver
@port 3000
和独立javascript文件独立服务器代码调用时,在port 9200
的elasticsearch上创建索引
- 但是**,相同的代码工作正常,即从httpserver
const express = require('express')
const app = express();
const { Client } = require('@elastic/elasticsearch');
const elasticClient = new Client({
node: "http://localhost:9200"
});
app.listen(3000, () => {
console.log('listening to the port 3000')
})
const getIndices = async () =>
{
return await elasticClient.cat.indices()
}
console.log(getIndices().then(res => { console.log(res) }).catch(err => {
console.log(err)
}))
这是独立的js脚本
const { Client } = require('@elastic/elasticsearch');
const elasticClient = new Client({
node: "http://localhost:9200"
});
const getIndices = async () =>
{
return await elasticClient.cat.indices()
}
console.log(getIndices().then(res => { console.log(res) }).catch(err => {
console.log(err)
}))
这是任何类型的网络错误或docker图像错误吗?
1条答案
按热度按时间93ze6v8z1#
这个问题已经被列在here中,问题出在端点上。所以localhost实际上是寻址你的docker容器,而不是你的主机。如果你在主机上运行你的express服务器,请使用host.docker.internal作为主机名,它将从你的docker容器寻址主机。Elasticsearch图像也是如此。现在代码变成,
其余部分保持不变。