我在kubernetes上成功部署了一个基于官方docker-vault镜像的自定义容器,但是在使用vault init
命令时出现以下错误:
* failed to initialize barrier: failed to persist keyring: mkdir vault: permission denied
我的Dockerfile如下:
FROM vault:0.8.3
WORKDIR /app
ADD . /app
RUN chmod +x ./configure_vault.sh
CMD ["server", "-config=vault.conf"]
我想要实现的是在容器启动后执行一个shell脚本来配置保险库。我有一个配置脚本,它的开头是这样的:
#!/bin/bash
export VAULT_ADDR="http://127.0.0.1:8200"
vault init -key-shares=1 -key-threshold=1 > vault_credentials
...
// configure some default roles and policies
为了执行它,我将我的Kubernetes Yaml部署文件配置如下:
...
spec:
containers:
- image: // my image
imagePullPolicy: Always
name: vault
ports:
- containerPort: 8200
name: vaultport
protocol: TCP
# Enable mlock for the vault executable to stop
# memory being swapped to disk so that secrets
# don’t get written to disk.
securityContext:
capabilities:
add:
- IPC_LOCK
volumeMounts:
- name: vault-volume
mountPath: /vault/file
lifecycle:
postStart:
exec:
command: ["/bin/sh", "./configure_vault.sh"]
volumes:
- name: vault-volume
persistentVolumeClaim:
claimName: vault
我看到vault用户对/vault文件夹有正确的权限,所以我不明白为什么目录创建会失败。我尝试给予vault用户root权限,或者使用
kubernetes exec
手动执行脚本来获取容器中的shell,但都没有成功。我不确定这是正确的解决方案,欢迎任何建议!
mkdir
的文件夹,但实际上它是在我的Docker /app工作目录中尝试创建它。我给了vault用户/app文件夹的权限,然后它就可以工作了...谢谢@mickburkejnr! - flmg