我想在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开始与用户100
(当我在Docker本地启动它时曾经是用户consul
,现在应该是root
组中的成员)的领事。
但是现在,当pod启动时,我得到以下错误
chown: /consul/data: Operation not permitted
chown
在Consuls docker-entrypoint.sh
中执行,我猜它(仍然)失败,因为用户100
不是root。
当容器有一个期望以root身份执行的入口点脚本时,有人能解释我如何使用非root用户启动容器吗?
我最后修复了Consuls docker-entrypoint.sh
,在执行chown命令之前通过添加一些if [ "$(id -u)" = "0" ]
测试来检查用户是否是root用户。
如果/ consul是一个nfs mount,可能是在服务器上设置了root_squash
和all_squash
。这将导致chown操作失败,因为新文件/文件夹将自动提供给nobody / nogroup。
如果您可以更改共享(暂时)以使用no_root_squash
和no_all_squash
直到所有文件都已设置,您应该没问题。由于该文件系统通常是持久的,所以应该只需要一次,所以之后你可以再次将它重置为root_squash
和all_squash
。
如果有人在寻找解决方案。您还可以使用Bitnami的Consul图像。它们提供了流行应用程序的非root映像。
docker pull bitnami/consul:1.4.4