我是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。可能是,对学习材料的几点建议会有所帮助。我发现很多,但与我的用例无关。
答案 0 :(得分:0)
运行up
时有两个阶段。 "构建"阶段,运行docker build
,"运行"阶段,运行相当于docker run
。在构建阶段,不支持链接到其他容器,因此您无法连接到它们。
一个简单的解决方案是在"运行期间运行部分设置。阶段,但缺点是它没有缓存,每次都必须执行。
要将其作为构建阶段的一部分包含在内,您可以导出需要发送到ES的json,将其作为ES构建的一部分包含在内,然后执行类似这样的步骤: