在docker

时间:2015-11-05 10:17:25

标签: elasticsearch docker logstash docker-compose

我是Docker的新手。我开发了一个需要弹性搜索服务器启动并运行的webapp,服务器本身会监听任何用户请求。在我们的工作流程中,我们希望看到elasticsearch启动并运行,然后logstash能够发布数据(通过读取我们在logstash conf文件的帮助下获得的数据),最后启动我们拥有的webapp。我建议使用docker compose,因为它有助于组成多个服务器 所以,我们有三个子目录,每个目录对应一个es,logstash和webapp。

在我的第一步中,我在elasticsearch dockerfile中有以下行

FROM elasticsearch:latest

RUN plugin -i elasticsearch/marvel/latest

同样,我在其他子目录中也有Dockerfile。 我使用命令' docker-compose up'开始这个过程。一旦构建了ES,就会构建ad logstash。在构建logstash时,它会尝试将数据发布到ES。但是它在这里发现ES没有运行。我看到连接拒绝异常。有人能说出这个错误的原因吗? Dockerfile中的内容可以吗?

我想,我不是按照我应该使用的方式使用docker / docker-compose。可能是,对学习材料的几点建议会有所帮助。我发现很多,但与我的用例无关。

1 个答案:

答案 0 :(得分:0)

运行up时有两个阶段。 "构建"阶段,运行docker build,"运行"阶段,运行相当于docker run。在构建阶段,不支持链接到其他容器,因此您无法连接到它们。

一个简单的解决方案是在"运行期间运行部分设置。阶段,但缺点是它没有缓存,每次都必须执行。

要将其作为构建阶段的一部分包含在内,您可以导出需要发送到ES的json,将其作为ES构建的一部分包含在内,然后执行类似这样的步骤:

  1. start es
  2. 等待es可用
  3. 运行curl将数据PUT / POST到ES
  4. 停止es