在Docker容器中以非root用户身份挂载卷

时间:2019-03-28 09:50:13

标签: docker kubernetes

我想以非root用户身份在docker容器中装载卷。我正在使用以下(k8s.yaml)-

volumeMounts:
        - name: volume-to-be-mounted
          mountPath: /location
volumes:
        - name:  volume-to-be-mounted
          hostPath:
            path: path
            type: DirectoryOrCreate

此卷作为根安装在容器内。但我想将其挂载为非root用户。有什么办法吗?我也可以使用https://docs.docker.com/storage/volumes/,但我也想在其他容器(在同一容器中)上安装相同的卷。

想到了一些解决方案,但不适合我的用例-

  1. 更改入口点中目录的权限(不可行,因为入口点将以非root用户身份运行。)
  2. https://stackoverflow.com/a/39576814/9081810我正在使用k8s.yaml来指定我的要求。我不知道此解决方案将如何适用。

可能有效的解决方案,但我不知道怎么做-

  1. 在安装卷时将权限设置为777。

3 个答案:

答案 0 :(得分:1)

您可以考虑以root用户身份运行init容器。初始化容器和主容器共享相同的体积。从init容器更新该卷的所有权

答案 1 :(得分:0)

如果您使用的是Kubernetes,则可以使用security context并设置fsGroup的值。

文档示例

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    fsGroup: 2000
  volumes:
  - name: sec-ctx-vol
    emptyDir: {}
  containers:
  - name: sec-ctx-demo
    image: gcr.io/google-samples/node-hello:1.0
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
    securityContext:
      allowPrivilegeEscalation: false

如果您只是使用docker ...那么自2013年以来一直有open issue

答案 2 :(得分:0)

您还希望将相同的卷挂载到其他容器(在同一容器中)。
我不认为你可以做到。
pod的定义是:A pod (as in a pod of whales or pea pod) is a group of one or more containers (such as Docker containers), with shared storage/network, and a specification for how to run the containers.
更多详细信息:https://kubernetes.io/docs/concepts/workloads/pods/pod/