Docker入口点权限被拒绝

11

我目前正在尝试将应用部署到Kubernetes集群中。但是每次部署都失败,并返回以下响应:

 Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/entrypoint.sh\": permission denied"

我尝试更改文件的权限,似乎成功了,如果我执行ls -l,则文件的权限为-rwxr-xr-x。

我尝试将chmod命令放置在Dockerfile本身中,并在构建和上传映像之前进行,但两者似乎都没有任何区别。 有什么想法,为什么我仍然会收到错误?

Dockerfile如下:

FROM node:10.15.0
CMD []
ENV NODE_PATH /opt/node_modules

# Add kraken files
RUN mkdir -p /opt/kraken
ADD .  /opt/kraken/
# RUN chown -R node /opt/
WORKDIR /opt/kraken

RUN npm install && \
    npm run build && \
    npm prune --production

# Add the entrypoint
COPY ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
USER node
ENTRYPOINT ["/entrypoint.sh"]

发布你的 Dockerfile - FL3SH
这里需要完成某个序列的一些任务。在dockerfile中给予/entrypoint.sh文件适当的权限,构建它,推送它,如果imagePullPolicy设置为"IfNotPresent",则使用新的镜像更新它,并部署。 - Shudipta Sharma
你能提供你的podTemplate吗? - Shudipta Sharma
操作员,请澄清需求,这将有助于更好地解释您所做的事情。 - Shudipta Sharma
@tacoofdoomk 你是在使用minikube还是其他集群? - Shudipta Sharma
3个回答

11

这个错误不是入口点错误,而是命令内部的错误。始终使用“sh script.sh”启动脚本,无论是入口点还是cmd。在这种情况下,应为:ENTRYPOINT ["sh", "entrypoint.sh"]。


1
ENTRYPOINT ["sh", "entrypoint.sh"]ENTRYPOINT ["/entrypoint.sh"] 是相同的,因此不需要再次执行。 - Shudipta Sharma
3
完全不同,一个需要可执行权限,另一个则不需要。试着自己理解吧。 - Akin Ozer
1
然后,必须在脚本的开头插入!#/bin/bash!#/bin/sh。那么如何知道脚本文件中没有这行呢? - Shudipta Sharma
1
如果你不加上那行代码,你的状态将会非常糟糕。如果你不遵循Bash脚本的第一条规则,你的脚本在不同环境下的行为将不一致。这是你自己的选择。 - Akin Ozer
所以,你不能说脚本没有这样的行。如果是这样的话,在ENTRYPOINT中添加'sh'是不必要的,这也不是解决方案。 - Shudipta Sharma
你正在继续哪种类型的参数? - Shudipta Sharma

-1

我创建了一个带有Dockerfile和entrypoint.sh文件的Github Action。我在我的电脑上运行了'chmod +x'命令并将其推送到Github存储库中。我没有在Dockerfile中运行'chmod +x'命令,但它仍然可以正常工作。


-2

托盘 Docker exec -it /bin/sh


3
您的回答可以通过添加更多支持性信息得到改进。请编辑并添加更多细节,例如引用或文献,以便他人可以确认您的答案是否正确。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

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