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