You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service容器无法找到/home路径下的Entrypoint脚本

问题描述

我编写了如下Dockerfile:

FROM alpine:3.14

COPY my.sh /home/app/welds/shell_scripts/my.sh
RUN chmod +x /home/app/welds/shell_scripts/my.sh
ENTRYPOINT ["/home/app/welds/shell_scripts/my.sh"]

其中my.sh内容为:

#!/bin/sh   
echo 'foo!'

在本地MacOS的Docker Desktop执行docker build -f Dockerfile . -t test构建并docker run test运行,输出正常:

foo!

但部署到Azure App Service(Linux容器)时,出现错误:

InnerException: Docker.DotNet.DockerApiException, Docker API responded with status code=BadRequest, response={"message":"OCI runtime create failed: runc create failed: unable to start container process: exec: "/home/app/welds/shell_scripts/my.sh": stat /home/app/welds/shell_scripts/my.sh: no such file or directory: unknown"}

将Dockerfile中的路径改为/app后:

FROM alpine:3.14

COPY my.sh /app/welds/shell_scripts/my.sh
RUN chmod +x /app/welds/shell_scripts/my.sh
ENTRYPOINT ["/app/welds/shell_scripts/my.sh"]

容器在本地和Azure App Service均能正常运行。替换为目标基础镜像phusion/passenger-ruby26:2.0.0后问题同样存在。

请问为何Azure App Service会无法识别路径包含/home的容器Entrypoint?

解答

Azure App Service 部署Linux容器时,会自动将/home目录挂载为持久化存储,用于存放应用日志、临时数据等内容,这个挂载操作会直接覆盖容器镜像中原有的/home目录结构。

也就是说,你构建镜像时复制到/home/app/welds/shell_scripts/下的my.sh文件,会被Azure的挂载操作覆盖,容器启动时自然找不到该文件。

而/app是Azure App Service Linux容器的默认工作目录,不会被自动挂载覆盖,所以将文件放到/app路径下时,镜像中的文件能正常保留,容器可以顺利执行Entrypoint脚本。

内容的提问来源于stack exchange,提问作者klimat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:12:09