У меня есть следующие настройки в 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
, чтобы начать, и директива depends_on
внутри docker-compose.yml
совсем не помогает.
Мне нужен способ узнать, когда logstash
готов, и после этого запустить контейнер node
.