前文疑惑ElasticSearch容器部署用户组问题
本文是在解决之前在支付宝小程序云部署ElasticSearch一直运行不起来的疑惑。
这一切的根源问题还是因为ElasticSearch的限制,不能用root用户来运行ElasticSearch。
技术人员给出的解决方案是:
在dockerfile中添加两条指令重新构建镜像。
| |
并且将挂载的持久卷的用户组设置为1000:0
即用户为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)

可以看到是手动指定的创建的elasticsearch用户,并且uid=1000
下图是容器中的运行es用户的详细id


构建镜像增加的两条命令:就是在变更文件的所属用户和用户组,由于使用elasticsearch用户来访问这些文件,所以,必须将这些文件改为elasticsearch所属,才能确保es的正确运行。
第二条指令是在修改docker启动脚本的所属用户。
注意:
由于docker容器是直接使用的宿主机的内核,而uid 和 gid 由 Linux 内核负责管理。内核控制的 uid 和 gid 只有一套;容器内使用的和容器外使用的是同一套,虽然用户名可能并不一样。
详细可参考文章:
