我的公司购买了我们尝试在 IBM 云上部署的软件,使用 kubernetes 并提供了私有 docker 存储库。部署后,总是会出现 Kubernetes 错误:“Back-off restarting failed container”。所以我阅读日志以了解容器重新启动的原因,这是错误:
Caused by: java.io.FileNotFoundException: /var/yseop-log/yseop-manager.log (Permission denied)
Run Code Online (Sandbox Code Playgroud)
所以我推断我只需要更改 Kubernetes 文件中的权限。由于我使用的是部署,我尝试了以下 initContainer :
initContainers:
- name: permission-fix
image: busybox
command: ['sh', '-c']
args: ['chmod -R 777 /var']
volumeMounts:
- mountPath: /var/yseop-engine
name: yseop-data
- mountPath: /var/yseop-data/yseop-manager
name: yseop-data
- mountPath: /var/yseop-log
name: yseop-data
Run Code Online (Sandbox Code Playgroud)
这没有用,因为我不允许以非 root 用户身份在只读文件夹上执行 chmod。
所以我尝试重新安装这些卷,但也失败了,因为我不是 root 用户。
然后我发现了以用户和组身份运行。为了找出我必须在安全上下文中写入哪个用户和组,我阅读了 dockerfile,这是用户和组:
USER 1001:0
Run Code Online (Sandbox Code Playgroud)
所以我想我可以在我的部署文件中写这个:
securityContext:
runAsUser: 1001
rusAsGroup: 0
Run Code Online (Sandbox Code Playgroud)
显然,这也不起作用,因为我不允许作为 0 组运行
所以我仍然不知道该怎么做才能正确部署这个镜像。在 m 计算机上执行 docker pull 和 exec …