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

Docker-Compose启动Python后端时找不到main.py文件的问题

解决Docker Compose启动Python后端找不到main.py的问题

问题现象

Docker容器构建成功,但执行docker-compose up时Python后端容器提示找不到main.py文件,服务启动失败:

python-backend  | python3: can't open file './main.py': [Errno 2] No such file or directory
python-backend exited with code 2

目录结构

|-app
|  |-facadeadd
|  |  |-bd
|  |  |  |-Dockerfile
|  |  |...
|-Dockerfile
|-main.py
|-docker-compose.yml
|-requirements.txt

相关配置文件

后端Dockerfile

FROM python:3.8

RUN apt-get update -y; apt-get upgrade -y
RUN yes | apt install build-essential portaudio19-dev
RUN python -m pip install --upgrade pip

WORKDIR /usr/src/app
COPY requirements.txt ./dependecies/
COPY . /usr/src/app/

RUN pip install --upgrade pip
RUN pip install torch
RUN pip install -r requirements.txt

数据库Dockerfile

FROM mysql:latest

COPY ./Titulos.xlsx ./bd/

docker-compose.yml

version: '3.8'

services:
  
  python_app:
    build: ./
    container_name: python-backend
    volumes:
      - ./app:/usr/src/app
    command: sh -c "sleep 10s ; python3 ./main.py"
    depends_on:
      - mysql_db

  mysql_db:
    build: ./facadeadd/bd/
    container_name: mysql-bd
    restart: always
    volumes:
      - ./bd/:/var/lib/mysql-bd/
    environment:
      MYSQL_DATABASE: 'bd'
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - '3300:3300'

错误原因分析

核心问题出在Python服务的volume挂载配置:
volumes: - ./app:/usr/src/app 将主机的app目录挂载到容器的/usr/src/app目录,完全覆盖了容器构建时复制的所有文件(包括根目录的main.py)。而主机的app目录中并不存在main.py,导致容器启动时找不到该文件。

此外,数据库服务也存在两处配置问题:

  1. MySQL默认端口为3306,当前ports映射3300:3300无法正常访问数据库
  2. MySQL默认数据存储目录为/var/lib/mysql,当前volume挂载路径错误

解决方案

1. 修复Python服务的挂载问题

根据需求选择以下两种方案之一:

方案A:开发环境(需要挂载本地代码实时更新)

修改docker-compose.yml中python_app的volumes配置,将主机根目录挂载到容器工作目录:

python_app:
  # ...其他配置不变
  volumes:
    - ./:/usr/src/app  # 替换原有的./app:/usr/src/app

方案B:生产环境(不需要挂载本地文件)

直接删除python_app下的volumes配置,容器将使用构建时复制的文件:

python_app:
  build: ./
  container_name: python-backend
  # 删掉volumes这一行
  command: sh -c "sleep 10s ; python3 main.py"  # 可以去掉./,因为WORKDIR已经是/usr/src/app
  depends_on:
    - mysql_db

2. 修复数据库服务的配置问题

修改docker-compose.yml中mysql_db的配置:

mysql_db:
  build: ./facadeadd/bd/
  container_name: mysql-bd
  restart: always
  volumes:
    - ./bd/:/var/lib/mysql  # 修正数据目录路径
  environment:
    MYSQL_DATABASE: 'bd'
    MYSQL_ROOT_PASSWORD: 'password'
  ports:
    - '3300:3306'  # 修正端口映射

3. 重新启动服务

执行以下命令重新构建并启动服务:

docker-compose down
docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:35:17