在docker容器中以非root用户身份装载卷

问题描述 投票:0回答:3

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

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

该卷以root身份安装在容器内。但是我想把它挂载为非root用户。有没有办法做到这一点?我也可以使用https://docs.docker.com/storage/volumes/,但我想在同一个容器(在同一个容器中)安装相同的容量。

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

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

可能的解决方案可以工作,但我不知道如何做 -

  1. 在安装卷时将权限设置为777。
docker kubernetes
3个回答
1
投票

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


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

如果你只是使用码头......那么自2013年以来就有一个open issue


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/

© www.soinside.com 2019 - 2024. All rights reserved.