gpt4 book ai didi

django - 无法在 Openshift online v3 : Operation not permitted 上 chmod 文件

转载 作者:行者123 更新时间:2023-12-03 16:41:14 24 4
gpt4 key购买 nike

我正在将 Django 应用程序从 Openshift v2 迁移到 v3(如果您不知道,RedHat 将在 9 月 30 日关闭 v2,请参阅:https://blog.openshift.com/migrate-to-v3-v2-eol/)

所以,我正在关注这篇博文来帮助我:https://blog.openshift.com/migrating-django-applications-openshift-3/ .我对新版本所基于的所有这些 Docker/Kubernetes 概念都不熟悉。

我取得了一些进展:我成功地构建了我的应用程序。然而它在部署时崩溃:
---> Running application from script (app.sh) ...
/usr/libexec/s2i/run: line 42: /opt/app-root/src/app.sh: Permission denied

事实上,app.sh 已经失去了它的 x 权限。我以调试身份登录失败的容器并查看它:

> oc debug dc/<my app>
> (app-root)sh-4.2$ ls -l /opt/app-root/src/app.sh
-rw-rw-r--. 1 default root 127 Sep 6 21:20 /opt/app-root/src/app.sh

博客文章指出“通过运行 chmod +x app.sh 确保 app.sh 文件是可执行的。”,这是我在本地存储库中所做的。无论如何,我想直接在pod中再次执行,但它不起作用:
(app-root)sh-4.2$ chmod +x /opt/app-root/src/app.sh                             
chmod: changing permissions of ‘/opt/app-root/src/app.sh’: Operation not permitted

那么,如何将 x 权限设置为 app.sh ?谢谢

最佳答案

无需查看更多细节,任何 S2I 构建器镜像都将很乐意使用您自定义提供的 run脚本以另一种方式启动应用程序。

创建 .s2i/bin/ (注意点)在您的源代码目录中,放置 run脚本并在 OpenShift 中重建应用程序 - 它会自动使用您的自定义 run部署时的脚本。

这是在 OpenShift 中使用自定义命令启动应用程序的首选方式。

关于您当前的问题,您无法更改脚本权限的原因很简单:您试图修改已部署 pod 中的权限,而不是 builder pod。部署的 pod 使用不同的 UID 运行,通常在 100000000 范围内的某个地方,并且肯定与构建生成的文件所有权不匹配。因此拒绝许可。

问题的根本原因(app.sh 丢失可执行权限)一定是构建过程安装这些文件的方式,并且确实查看了 /usr/libexec/s2i/assemble基本图像中的脚本似乎确实揭示了罪魁祸首。最后两行是:

# set permissions for any installed artifacts
fix-permissions /opt/app-root

如果您想更改构建的这一部分而不是使用自定义 run脚本,我建议你再创建 .s2i/bin/assemble在你的项目的源代码中,让它看起来像这样:
#!/bin/bash
echo "Running stock build:"
${STI_SCRIPTS_PATH}/assemble
echo "Fixing the mess:"
chmod 755 /opt/app-root/src/app.sh

这将修复库存构建过程对文件权限所做的任何事情,并将使用与构建的其余部分相同的 UID 来完成,因此文件所有权应该不是问题。

关于django - 无法在 Openshift online v3 : Operation not permitted 上 chmod 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46091601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com