我刚刚使用Docker文件创建了图像,并且用于更改刚使用的用户:
USER myuser
我们使用目录存储数据,我们使用以下命令更改该目录权限:
chown -R myuser:myuser /data-dir
这个Docker文件用于etcd,我们希望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
任何人都可以在这里暗示我做错了吗?
答案 0 :(得分:14)
这是因为码头工人。它仅使用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