我在Docker容器中部署ElasticSearch,该容器通常以root用户身份运行进程。我得到
"org.elasticsearch.bootstrap.StartupError: java.lang.RuntimeException: cannot run elasticsearch as root"
尝试启动 ElasticSearch 时出错。
ElasticSearch 不能以根用户身份运行的原因是什么?
在 docker 容器内部,事情是隔离的,根进程被认为是安全的。我也许可以将我的映像配置为以非 root 身份运行,但它需要大量繁重的工作,并且与我们的部署模型相反。
我也尝试过没有码头工人容器,但出现以下错误。
./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)
有关完整的错误详细信息,请参阅日志。
这已经讨论过几次了。引用 Elastic 维护的 Docker 镜像:
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