无ENTRYPOINT与CMD的官方Logstash Dockerfile为何可正常启动服务
问题核心原因:你找到的Dockerfile并不是官方对外发布的生产可用Logstash镜像的构建文件
你贴的这份Dockerfile是Logstash源码仓库中用于本地开发、代码构建、自动化测试的辅助镜像文件,仅用于Logstash开发环节的环境准备,不会用来构建发布到Docker Hub的官方用户镜像。
官方正式对外发布的Logstash镜像的构建逻辑是单独维护的,里面明确定义了ENTRYPOINT和CMD启动指令,这也是你直接拉取官方镜像启动时能自动运行Logstash的原因。
补充说明
如果你真的用你贴的这份Dockerfile自行构建镜像,不加启动指令直接运行的话,会继承基础镜像ubuntu:bionic的默认CMD /bin/bash,只会启动一个交互式Shell,根本不会自动运行Logstash。你之前能直接启动运行,用的肯定是官方预构建好的正式镜像。
自定义启动命令的方案
如果你需要在Docker或者Kubernetes中自定义启动逻辑,直接覆盖官方镜像的CMD即可:
- 本地Docker测试时可以直接在run命令末尾加自定义参数,比如
docker run docker.elastic.co/logstash/logstash:7.15.0 logstash -f /你的自定义配置路径 - Kubernetes中可以在Pod配置的
command/args字段填写自定义启动参数即可。
内容的提问来源于stack exchange,提问作者John Humphreys
相关产品推荐
相关产品推荐

