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

Mac(ARM64架构)Docker容器中运行DeepFace时导入模块导致应用异常的问题求助

Mac(ARM64架构)Docker容器中运行DeepFace时导入模块导致应用异常的问题求助

大家好,我现在遇到了一个在Docker容器里运行DeepFace的棘手问题,折腾了好一阵还是没解决,想请各位帮忙分析分析!

我正在尝试在Docker容器中安装DeepFace来做图片比对,目前已经能把容器搭建起来,但似乎还缺一些关键依赖,或者有架构兼容的问题,导致只要导入DeepFace模块,应用就直接挂住。

具体情况是:在我的main.py里,如果注释掉from deepface import DeepFace这行代码,用命令uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload启动FastAPI服务,应用就能正常跑起来;但只要取消这行的注释,服务启动后就会直接卡住,没有任何后续输出。


我的系统环境

硬件

  • MacBook Air(M系列芯片,执行uname -m输出arm64)

软件

  • Docker Desktop 4.39.0(184744),引擎详细信息如下:
Server: Docker Desktop 4.39.0 (184744)
 Engine:
  Version:          28.0.1
  API version:      1.48 (minimum version 1.24)
  Go version:       go1.23.6
  Git commit:       bbd0a17
  Built:            Wed Feb 26 10:40:57 2025
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.25
  GitCommit:        bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
 runc:
  Version:          1.2.4
  GitCommit:        v1.2.4-0-g6c52b3f
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  • VS Code(最新版本)

项目关键文件内容

.devcontainer/devcontainer.json

{
  "name": "AI Devcontainer",
  "dockerComposeFile": "../docker-compose.yml",
  "service": "rp",
  "workspaceFolder": "/usr/src/app",
  "postCreateCommand": "pip install -r requirements.txt"
}

初始版docker-compose.yml

services:
  rp:
    container_name: ai
    platform: linux/amd64
    build: .
    command: sleep infinity
    networks:
      - RP
    volumes:
      - .:/usr/src/app
    ports:
      - '8000:8000'

networks:
  RP:
    external: true

初始版Dockerfile

# Use the official Python image from the DockerHub
FROM python:3.9-slim

# Set the working directory in the container
WORKDIR /app

# Install system dependencies required for DeepFace
# Update package list and install dependencies
RUN apt update && apt install -y \
    tzdata \
    libgl1-mesa-glx \
    libegl1-mesa \
    libxrandr2 \
    libxss1 \
    libxcursor1 \
    libxcomposite1 \
    libasound2 \
    libxi6 \
    libxtst6 \
    curl \
    ffmpeg \
    git \
    nano \
    gnupg2 \
    libsm6 \
    wget \
    unzip \
    libxcb-icccm4 \
    libxkbcommon-x11-0 \
    libxcb-keysyms1 \
    libxcb-render0 \
    libxcb-render-util0 \
    libxcb-image0 \
    python3 \
    python3-pip

# Install required Qt and X11 libraries
RUN apt update && apt install -y \
    libx11-xcb1 \
    libxcb1 \
    libxcomposite1 \
    libxkbcommon-x11-0 \
    libxkbcommon0 \
    libxcb-cursor0 \
    libxcb-shape0 \
    libxcb-shm0 \
    libxcb-sync1 \
    libxcb-xfixes0 \
    libxcb-xinerama0 \
    libxcb-xinput0 \
    libxcb-xkb1


    # Upgrade pip and install required Python packages
RUN python -m pip install --upgrade pip
RUN python -m pip install \
    onnxruntime==1.15.1 \
    numpy==1.21.6 \
    h5py \
    numexpr \
    protobuf==3.20.2 \
    opencv-python==4.8.0.74 \
    opencv-contrib-python==4.8.0.74 \
    pyqt6==6.5.1 \
    onnx==1.14.0 \
    torch==1.13.1 \
    torchvision==0.14.1
    

# Install dependencies
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Copy the rest of the application code into the container
COPY . .

# Expose port 8000 for the FastAPI app
EXPOSE 8000

# Command to run FastAPI with Uvicorn
CMD ["sleep", "infinity"]

requirements.txt

fastapi
uvicorn
requests

deepface 
flask 
numpy 
pandas 
tensorflow-cpu
gunicorn 
pillow 
opencv-python

main.py核心代码(问题触发点)

import logging
logging.basicConfig(level=logging.DEBUG)

from fastapi import FastAPI, HTTPException
import uvicorn
import requests

import numpy as np

import os
import socket
import base64
from typing import List, Dict, Union

#
# 就是这行代码导致应用挂住
#
from deepface import DeepFace


app = FastAPI(title="RP AI Documentation", docs_url="/api-docs")

@app.on_event("startup")
async def startup_event():
    print("Starting up...")
    # Simulate any heavy lifting during startup if needed
    print("Startup finished!")

if __name__ == "__main__":
    print("Starting app...")
    uvicorn.run(app, host="0.0.0.0", port=8000)
    print("App started!")


# 图片比对的核心函数
def compare_faces_with_deepface(img_path1: str, img_path2: str) -> bool:
    try:
        result = DeepFace.verify(img_path1, img_path2)
        return result["verified"]
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Error during face comparison: {str(e)}")

# 其他辅助处理函数...

我遇到的具体错误和尝试过的方法

初始环境下的错误

在VS Code中加载Dev Container,容器构建完成后运行启动命令,会输出以下内容然后直接挂住,没有任何后续日志:

root@1f6928173e34:/usr/src/app# uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
INFO:     Will watch for changes in these directories: ['/usr/src/app']
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [1104] using StatReload
INFO:numexpr.utils:NumExpr defaulting to 8 threads.

尝试1:叠加DeepFace官方镜像

我修改了Dockerfile的开头,同时使用Python基础镜像和DeepFace官方镜像,结果启动应用后,取消注释DeepFace导入语句,服务重载时出现了TensorFlow的错误:

WARNING:  StatReload detected changes in 'app/main.py'. Reloading...
INFO:     Shutting down
INFO:     Waiting for application shutdown.
INFO:     Application shutdown complete.
INFO:     Finished server process [523]
The TensorFlow library was compiled to use AVX instructions, but these aren't available on your machine.

尝试2:仅用DeepFace官方镜像并移除AMD64强制配置

看到有评论说可能是platform: linux/amd64的问题(因为我的Mac是ARM64架构),所以我做了两个调整:

  1. Dockerfile:只使用官方DeepFace镜像,去掉了之前手动安装的大量系统依赖
  2. docker-compose.yml:移除了platform: linux/amd64配置

但修改后,取消注释DeepFace的导入语句,应用还是会和初始情况一样挂住,没有任何报错信息。


现在我实在摸不着头绪了,到底是ARM64和DeepFace/TensorFlow的兼容问题?还是我漏掉了某些必须的系统依赖?或者是TensorFlow的版本编译不支持ARM64?希望有过类似经验的朋友能给我一些思路或者解决方案,非常感谢!

备注:内容来源于stack exchange,提问作者MrLister

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:58:08