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

部署在Azure上的Flask Web应用无法访问:容器启动失败报错

Flask应用部署Azure启动失败问题排查与解决

问题背景

将Python Flask Web应用通过Docker部署到Azure后无法访问,镜像已推送至Azure Container Registry(ACR),访问域名显示应用错误,容器启动失败。

相关配置与日志

Dockerfile

# Use the Azure Web App Python base image
FROM python:3.10

# Set the working directory in the container
WORKDIR /app

# Install FFmpeg
RUN apt-get update && apt-get install -y ffmpeg

# Upgrade pip to the latest version
RUN pip install --no-cache-dir --upgrade pip

# Copy the requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Copy the Flask app code into the container
COPY . .

# Expose the port your Flask app runs on (usually 5000)
EXPOSE 5000

# Define the command to run your Flask app
CMD ["python", "application.py"]

application.py关键代码

if __name__ == "__main__":
    application.run(host="0.0.0.0", debug=True)

日志流关键错误信息

2023-10-08T21:18:00.727101619Z exec /usr/local/bin/python: exec format error
2023-10-09T00:00:42.275260288Z exec /usr/local/bin/python: exec format error
2023-10-09T00:08:22.440Z ERROR - Container talktotexts_0_0932adae for site talktotexts has exited, failing site start
2023-10-09T00:08:22.446Z ERROR - Container talktotexts_0_0932adae didn't respond to HTTP pings on port: 5000, failing site start. See container logs for debugging.

域名访问错误

:( Application Error
If you are the application administrator, you can access the diagnostic resources.

错误分析

日志中反复出现的exec /usr/local/bin/python: exec format error是核心问题,说明Docker镜像的CPU架构与Azure App Service运行环境不兼容。例如本地开发环境为ARM架构(如M系列苹果电脑),而Azure App Service默认使用AMD64(x86_64)架构,本地构建的ARM镜像无法在Azure的AMD64环境中运行,导致Python二进制文件执行格式错误,容器启动失败,无法响应端口5000的健康检查,最终触发应用错误。

解决方案

1. 构建兼容AMD64架构的镜像

在本地构建镜像时指定目标架构为AMD64,确保镜像适配Azure环境:

  • 使用Docker buildx构建多架构镜像(推荐):
    # 初始化buildx(首次使用)
    docker buildx create --use
    # 构建并推送AMD64镜像到ACR
    docker buildx build --platform linux/amd64 -t <你的ACR地址>/<镜像名>:latest --push .
    
  • 若未使用buildx,可在Dockerfile开头添加平台指定(需Docker Desktop开启Rosetta兼容):
    FROM --platform=linux/amd64 python:3.10
    
    完成后重新构建并推送镜像到ACR。

2. 验证镜像架构

推送完成后,在ACR中查看镜像的架构信息,确认显示为linux/amd64。

3. 重新部署Azure Web App

在Azure门户中重新触发部署,或使用Azure CLI拉取新镜像启动容器:

az webapp config container set --name <你的Web App名称> --resource-group <资源组名称> --docker-custom-image-name <你的ACR地址>/<镜像名>:latest

4. 额外检查项

  • 确认Flask应用监听0.0.0.0而非127.0.0.1(当前代码已正确配置),确保容器内服务可被外部访问。
  • 确认Azure Web App的PORT环境变量设置为5000(日志显示已配置正确)。
  • 开启容器日志:在Azure门户的Web App中进入「监控」->「日志」,启用容器日志记录,便于后续排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:40:55