如何在Kubernetes/Docker中更改映射卷的权限

15

我刚刚使用 Docker 文件创建了镜像,为了更改用户,我只是简单地使用了:

USER myuser

我们正在使用目录来存储数据,我们使用以下命令更改该目录的权限:

chown -R myuser:myuser /data-dir
这个Docker文件是为etcd准备的,我们希望使用/data-dir来存储数据。现在,我们使用Kubernetes yml文件将/data-dir映射到EFS卷中。
使用以下代码:
volumeMounts:
        - name: etcdefs
          mountPath: /data-dir
      volumes:
      - name: etcdefs
        persistentVolumeClaim:
          claimName: efs-etcd

接下来,我期望映射的目录/data-dir应该有myuser:myuser的权限,但它却将目录设为了root:root。

请问我在这里做错了什么吗?

1个回答

25

这是因为docker只使用root权限挂载卷,你可以用chmod更改权限,但只能在容器启动后进行。

你可以在这里阅读更多信息https://github.com/moby/moby/issues/2259 这个问题已经存在很长时间了。

在 Kubernetes 中,你可以使用fsGroup并强制卷可由指定GID写入。这是一种有效的解决方案,并已记录文档中。在此处可以获得更多信息https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

这是一个部署示例:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: alpine
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: alpine
    spec:
      securityContext:
        fsGroup: 1000
      containers:
        - name: alpine
          image: alpine
          volumeMounts:
              - mountPath: /var/alpine
                name: alpine
      volumes:
        - name: alpine
          awsElasticBlockStore:
            volumeID: vol-1234567890
            fsType: ext4

嘿,你能给我一个例子吗,展示如何使用fsGroup与kubernetes进行编写吗?在我之前提供的示例中。 - Sagan Pariyar
@SaganPariyar 我已经修改了我的答案,现在它包含了使用 fsGroup 的部署示例。 - 3h4x
嘿,谢谢你的回答,实际上错误是其他问题。之前我们使用root创建了docker镜像,并在映射时使用root创建了目录,下一次当我使用myuser作为映射卷时,已经用root用户创建了目录,所以它会出现权限问题。我只需删除该目录并使用myuser重新创建即可解决问题。 - Sagan Pariyar
很高兴听到你解决了这个问题。我想到的一件事是,在容器中创建目录会使您易受Docker挂载卷的更改影响,而使用Kubernetes的“fsGroup”选项您将会更稳定。 - 3h4x
1
配置映射挂载的卷怎么样? - happyyangyuan
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接