Featured image of post ElasticSearch部署用户组问题

ElasticSearch部署用户组问题

前文疑惑ElasticSearch容器部署用户组问题

前文疑惑ElasticSearch容器部署用户组问题

前文:YuanErBlog|原尔

本文是在解决之前在支付宝小程序云部署ElasticSearch一直运行不起来的疑惑。

这一切的根源问题还是因为ElasticSearch的限制,不能用root用户来运行ElasticSearch。

技术人员给出的解决方案是:

在dockerfile中添加两条指令重新构建镜像。

1
2
chown -R elasticsearch:root /usr/share/elasticsearch
chown elasticsearch:root /usr/local/bin/docker-entrypoint.sh

并且将挂载的持久卷的用户组设置为1000:0

image-20240603000551953即用户为1000,用户组为0(root)

可以看到这里的1000也正好对应了下面容器中1000 elasticsearch用户。

至于为什么能确定是1000,我的猜测的原因是:在许多Linux发行版中,用户1000可能是第一个创建的非特权用户账户。例如,在Ubuntu系统中,第一个通过安装过程创建的用户通常会被赋予UID 1000。

上述问题在elasticsearch构建镜像的dockerfile中找到了答案。

该文件地址:elasticsearch/distribution/docker/src/docker/Dockerfile at main · elastic/elasticsearch (github.com)

image-20240603120450152

可以看到是手动指定的创建的elasticsearch用户,并且uid=1000

下图是容器中的运行es用户的详细id

image-20240602235505869

image-20240603000815927

构建镜像增加的两条命令:就是在变更文件的所属用户和用户组,由于使用elasticsearch用户来访问这些文件,所以,必须将这些文件改为elasticsearch所属,才能确保es的正确运行。

第二条指令是在修改docker启动脚本的所属用户。

注意:

由于docker容器是直接使用的宿主机的内核,而uid 和 gid 由 Linux 内核负责管理。内核控制的 uid 和 gid 只有一套;容器内使用的和容器外使用的是同一套,虽然用户名可能并不一样。

详细可参考文章:

理解 docker 容器中的 uid 和 gid - sparkdev - 博客园 (cnblogs.com)