我想在kubernetes中运行consul,但不允许以root用户身份运行。
所以我补充说
RUN addgroup consul root
字符串
到Dockerfile(派生的FROM consul:1.0.3
)
并在kubernetes中开始部署,
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
xyz.service: consul-deployment
name: consul-deployment
spec:
template:
spec:
securityContext:
runAsUser: 100
型
现在,我希望kubernetes启动consul时使用用户100
(当我在Docker中本地启动它时,他曾经是用户consul
,现在应该是组root
的成员)。
但现在我得到以下的错误时,吊舱启动
chown: /consul/data: Operation not permitted
型chown
在Consuls docker-entrypoint.sh
中执行,我猜它(仍然)失败,因为用户100
不是root。
有谁能解释一下,当容器有一个入口点脚本期望以root身份执行时,如何用非root用户启动容器?
4条答案
按热度按时间j7dteeu81#
最后,我通过添加一些
if [ "$(id -u)" = "0" ]
测试,修复了Consulsdocker-entrypoint.sh
,以便在执行chown命令之前检查用户是否是root用户。You can find the patch on GitHub.
x0fgdtte2#
如果有人在寻找解决方案。你也可以使用领事图像从Bitnami。他们提供流行的应用程序的非根图像。
字符串
wnvonmuf3#
如果/consul是一个nfs挂载,可能是
root_squash
和all_squash
在服务器上被设置了。这将导致chown操作失败,因为新的文件/文件夹将自动分配给nobody/nogroup。如果您可以更改共享(临时)使用
no_root_squash
和no_all_squash
,直到所有文件都已设置,您应该没事。由于该文件系统通常是持久化的,因此只需要一次,因此之后您可以再次将其重置为root_squash
和all_squash
。aor9mmx14#
字符串