以非root身份在kubernetes中运行Consul Docker镜像

e4eetjau  于 2024-01-07  发布在  Kubernetes
关注(0)|答案(4)|浏览(279)

我想在kubernetes中运行consul,但不允许以root用户身份运行。
所以我补充说

  1. RUN addgroup consul root

字符串
到Dockerfile(派生的FROM consul:1.0.3
并在kubernetes中开始部署,

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. labels:
  5. xyz.service: consul-deployment
  6. name: consul-deployment
  7. spec:
  8. template:
  9. spec:
  10. securityContext:
  11. runAsUser: 100


现在,我希望kubernetes启动consul时使用用户100(当我在Docker中本地启动它时,他曾经是用户consul,现在应该是组root的成员)。
但现在我得到以下的错误时,吊舱启动

  1. chown: /consul/data: Operation not permitted


chown在Consuls docker-entrypoint.sh中执行,我猜它(仍然)失败,因为用户100不是root。
有谁能解释一下,当容器有一个入口点脚本期望以root身份执行时,如何用非root用户启动容器?

j7dteeu8

j7dteeu81#

最后,我通过添加一些if [ "$(id -u)" = "0" ]测试,修复了Consuls docker-entrypoint.sh,以便在执行chown命令之前检查用户是否是root用户。
You can find the patch on GitHub.

x0fgdtte

x0fgdtte2#

如果有人在寻找解决方案。你也可以使用领事图像从Bitnami。他们提供流行的应用程序的非根图像。

  1. docker pull bitnami/consul:1.4.4

字符串

wnvonmuf

wnvonmuf3#

如果/consul是一个nfs挂载,可能是root_squashall_squash在服务器上被设置了。这将导致chown操作失败,因为新的文件/文件夹将自动分配给nobody/nogroup。
如果您可以更改共享(临时)使用no_root_squashno_all_squash,直到所有文件都已设置,您应该没事。由于该文件系统通常是持久化的,因此只需要一次,因此之后您可以再次将其重置为root_squashall_squash

aor9mmx1

aor9mmx14#

  1. user: consul
  2. environment:
  3. - CONSUL_DISABLE_PERM_MGMT=yes

字符串

相关问题