从 Kubernetes 中的 dockerfile 执行脚本entrypoint.sh 时权限被拒绝

Rau*_*han 3 permission-denied docker kubernetes dockerfile

我有一个多阶段 dockerfile,我正在 k8s 中部署它,脚本为ENTRYPOINT ["./entrypoint.sh"].

尽管 helm 和 env 是 Azure,但部署已完成。创建容器时出错“./entrypoint.sh”:权限被拒绝:未知

Warning  Failed     14s (x3 over 31s)  kubelet            Error: failed to create containerd task: OCI runtime create failed: container_linux.go:380: starting container process caused:
exec: "./entrypoint.sh": permission denied: unknown
Warning  BackOff    1s (x4 over 30s)   kubelet            Back-off restarting failed container
Run Code Online (Sandbox Code Playgroud)

我已同意chmod +x使其可执行并chmod 755获得许可。

Dockerfile

##############
##   Build   #
##############
FROM repo.azurecr.io/maven:3.8.1-jdk-11 AS BUILD
ARG WORKDIR=/opt/work

COPY . $WORKDIR/
WORKDIR ${WORKDIR}

COPY ./settings.xml /root/.m2/settings.xml

RUN --mount=type=cache,target=/root/.m2/repository \
    mvn clean package -pl app -am

RUN rm /root/.m2/settings.xml
RUN rm ./settings.xml

#################
###   Runtime   #
#################
FROM repo.azurecr.io/openjdk:11-jre-slim as RUNTIME
RUN mkdir /opt/app \
    && useradd -ms /bin/bash javauser \
    && chown -R javauser:javauser /opt/app \
    && apt-get update \
    && apt-get install curl -y \
    && rm -rf /var/lib/apt/lists/*

COPY --from=BUILD /opt/work/app/target/*.jar /opt/app/service.jar
COPY --from=BUILD /opt/work/entrypoint.sh /opt/app/entrypoint.sh

RUN chmod +x /opt/app/entrypoint.sh
RUN chmod 755 /opt/app/entrypoint.sh

WORKDIR /opt/app
USER javauser

ENTRYPOINT ["./entrypoint.sh"]

Run Code Online (Sandbox Code Playgroud)

PS:请不要重复/sf/answers/3244736491/,因为我已经添加了它RUN chmod +x entrypoint.sh,但它没有解决问题。

Ble*_*Fox 5

在入口点中使用bash(或者您首选的 shell,如果没有的话):bash

ENTRYPOINT [ "bash", "-c", "./entrypoint.sh" ]
Run Code Online (Sandbox Code Playgroud)

即使您尚未将脚本设置为可执行文件(我看到您已将其设置为可执行文件),这也会运行入口点脚本

您也可以将其类似地用于其他脚本,例如 Python:

ENTRYPOINT [ "python", "./entrypoint.py" ]
Run Code Online (Sandbox Code Playgroud)

您还可以尝试使用完整的可执行路径调用脚本:

ENTRYPOINT [ "/opt/app/entrypoint.sh" ]
Run Code Online (Sandbox Code Playgroud)