【发布时间】:2018-11-04 08:26:08
【问题描述】:
我在docker-compose.yml 中有以下设置:
....
logstash:
container_name: logstash
image: docker.elastic.co/logstash/logstash:6.2.4
node:
container_name: node
build:
context: ./node/
dockerfile: ./Dockerfile
depends_on:
- logstash
....
我正在使用包winston-logstash 将它们连接在一起。
这是传输层:
const logstashHost = process.env.LOGSTASH_HOST || 'logstash'
const logstashPort = process.env.LOGSTASH_PORT || 5045
new (winstonLogstash.Logstash)({
host: logstashHost,
port: logstashPort,
node_name: 'node',
timestamp: true,
max_connect_retries: 5,
timeout_connect_retries: 1000,
})
以及流水线配置:
input {
tcp {
port => 5045
}
}
output {
stdout{}
elasticsearch {
hosts => ["elasticsearch:9200"]
}
}
使用docker-compose up 得到Error: Max retries reached, transport in silent mode, OFFLINE
如果我使用大的setTimeout 手动启动服务器或增加连接重试次数,它最终会起作用。如果我启动 logstash 并在一段时间后启动节点容器,它也可以工作。
问题在于,显然这不是一个好习惯,我无法猜测logstash 需要多长时间才能开始,而且docker-compose.yml 中的depends_on 指令根本没有帮助。
我需要一种方法来知道logstash 何时准备就绪并在此之后启动node 容器。
【问题讨论】:
标签: node.js docker elasticsearch docker-compose logstash