我在Docker容器中部署ElasticSearch,它通常以root用户身份运行进程。我得到了
"org.elasticsearch.bootstrap.StartupError: java.lang.RuntimeException: cannot run elasticsearch as root"
尝试启动ElasticSearch时出现错误。
ElasticSearch无法以root身份运行的原因是什么?
在docker容器内部,事物被隔离,根进程被认为是安全的。我可能能够将我的映像配置为以非root身份运行,但它需要大量繁重工作并且对我们的部署模型具有反模式。
我也尝试过没有docker容器,但是出现了以下错误。
./ elasticsearch
Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.at
org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:93)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:144)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
请参阅日志以获取完整的错误详情。
答案 0 :(得分:0)
已经讨论了几次。来自Elastic维护的Docker镜像的Quoting:
Elasticsearch的检查不允许以root身份运行它。这个 已在讨论过 https://discuss.elastic.co/t/why-is-it-elasticsearch-is-not-allowed-to-run-as-root/60413/2 并且在docker容器中以root身份运行进程并不是最好的 实践。您可以在上述讨论中看到一些原因, 在 https://forums.docker.com/t/root-user-or-non-root-user-inside-container/966/10, http://blog.dscpl.com.au/2015/12/don-run-as-root-inside-of-docker.html 和其他地方。容器的风险尤其严重 像Elasticsearch,用户经常绑定装载主机目录 具有写访问权。
PS:如果您不想构建自己的图像,可以使用官方维护的图像:https://www.docker.elastic.co