我在中进行以下设置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
容器。
Docker compose不会等到容器准备就绪,而只会等到容器正在运行。
depends_on
只会确保logstash
在您的节点容器之前启动,但是再次声明,这并不意味着它将等待直到准备就绪。
您可以自己在节点上处理检查,也可以使用包装器脚本。在docker-compose文档中,他们建议使用wait-for-
it
或dockerize
你可以在这里阅读更多
您的节点容器command
可以从node index.js
(或您拥有的任何容器)更改为bash wait-for-logtash.sh
:
#!/bin/bash
## Or whatever command is used for checking logstash availability
until curl 'http://logstash:5045' 2> /dev/null; do
echo "Waiting for logtash..."
sleep 1;
done
# Start your server
node index.js
问题内容: 谁能让我让selenium等到页面完全加载后?我想要一些通用的东西,我知道我可以配置WebDriverWait并调用“ find”之类的东西让它等待,但我不会走那么远。我只需要测试页面是否成功加载,然后转到下一页进行测试即可。 我在.net中找到了某些内容,但无法在Java中运行。 有任何想法吗? 问题答案: 试试这个代码: 上面的代码最多等待10秒钟才能加载页面。如果页面加载时间超出
问题内容: 我有一个Java ,它公开了其他线程要访问的属性: 问题是从运行到可用为止需要花费很短的时间。呼叫者可以在此之前致电并获得。我希望它们只是在初始化发生后立即阻塞,等待并获取值。(此后永远不会更改。)直到准备就绪,这将需要几毫秒的时间,因此我对这种方法感到满意。 现在,我可以做到这一点,并且有95%的机会我会做对的。但是我想知道你们所有人将如何做。有一种原始的,将做到这一点,我已经错过了
我使用等待块使代理等待,直到条件为真(资源空闲)。我尝试在等待块“输入”字段中写入以下内容: 问题是,如果资源变得繁忙,代理将被困在等待块中,不会被释放,即使条件再次变为真。然后,当下一个代理进入等待块时(条件再次变为真),它将传递原本在它前面的代理,但现在被卡住了。有办法解决这个问题吗?
我使用这段代码点击下拉列表: 我得到错误可能是因为有一个显示登录栏的层。之后,该元素被禁用,代码抛出异常。 是否可以实现一个等待元素不被禁用的listen?
我有以下准备的一个准备好的声明失败了... 我在我的第一份准备好的声明中几乎有同样的准备,而且它进行得很好。我不确定是否我有两个准备好的声明,如果这是造成一个问题,或情况可能是什么? 现在我有个错误... 更新-可能的内部连接,像这样?
问题内容: 如何让我的代码等待,直到DispatchQueue中的任务完成?是否需要任何CompletionHandler或其他东西? 我正在使用Xcode 8.2并在Swift 3中编写。 问题答案: 使用s可以实现这一点。您可以在群组和通话达到平衡时得到通知: 或者您可以等待: 注意 :阻止当前队列(在您的情况下可能是主队列),因此您必须在另一个队列上(如上面的示例代码中)以避免 死锁 。