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

Docker无法找到复制文件:前后端容器启动失败求助

问题:Docker容器无法找到后端manage.py和前端package.json文件

尝试运行前后端多个Docker容器,但容器启动失败,Docker提示找不到后端的manage.py文件和前端的package.json文件,已尝试多种同类问题解决方案仍未解决。

文件夹结构

- docker-compose.yml
- frontend/
  - Dockerfile
  - package.json
  - node项目文件...
- backend/
  - Dockerfile
  - manage.py
  -更多Django项目文件...

配置文件

docker-compose.yml

version: '3.4'

services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: 'backend'
    command: python manage.py runserver 0.0.0.0:8080
    volumes:
      - ./data/backend:/backend_app
    ports:
      - '8080:8080'
    restart: always

  frontend:
    image: node:18.14.2
    build:
      context: ./frontend
      dockerfile: Dockerfile
    container_name: 'frontend'
    command: npm run preview
    ports:
      - '3000:3000'
    volumes:
      - ./data/frontend:/frontend_app

frontend/Dockerfile

FROM node:18.14.2

EXPOSE 3000

WORKDIR /frontend_app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "run", "preview"]

backend/Dockerfile

FROM python:3.10-slim

EXPOSE 8080

ENV PYTHONDONTWRITEBYTECODE=1

ENV PYTHONUNBUFFERED=1

WORKDIR /backend_app

COPY requirements.txt .

RUN python -m pip install --upgrade pip
RUN python -m pip install -r requirements.txt

COPY . .

CMD ["python", "manage.py", "runserver", "0.0.0.0:8080"]

错误日志

运行docker compose up时的部分控制台输出:

frontend          | npm
frontend          |  ERR! code ENOENT
frontend          | npm ERR! syscall open
frontend          | npm ERR! path /frontend_app/package.json
frontend          | npm
frontend          |  ERR! errno -2
frontend          | npm ERR! enoent ENOENT: no such file or directory, open '/frontend_app/package.json'
frontend          | npm ERR! enoent This is related to npm not being able to find a file.
frontend          | npm ERR! enoent 
frontend          | 
frontend          | 
frontend          | npm ERR! A complete log of this run can be found in:
frontend          | npm ERR!     /root/.npm/_logs/2023-07-17T22_35_21_039Z-debug-0.log
backend           | python: can't open file '/backend_app/manage.py': [Errno 2] No such file or directory
backend exited with code 2

解决方案

核心问题是docker-compose中的volumes挂载覆盖了容器内的工作目录:

你的Dockerfile已经通过COPY . .将项目文件复制到容器的/backend_app和/frontend_app目录,但docker-compose里配置的volumes将本地的./data/backend挂载到/backend_app,./data/frontend挂载到/frontend_app。如果本地的./data/backend和./data/frontend目录为空或没有对应的manage.py、package.json文件,挂载后容器内原有的文件会被覆盖,导致找不到目标文件。

解决方法1:移除不必要的挂载(推荐,适合生产环境)

如果不需要本地代码与容器实时同步,直接删除docker-compose.yml中的volumes配置:

修改后的docker-compose.yml:

version: '3.4'

services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: 'backend'
    command: python manage.py runserver 0.0.0.0:8080
    ports:
      - '8080:8080'
    restart: always

  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    container_name: 'frontend'
    command: npm run preview
    ports:
      - '3000:3000'

解决方法2:保留挂载但确保本地目录有对应文件(适合开发环境热更新)

如果需要本地代码修改后同步到容器,先确保本地./data/backend和./data/frontend目录存在,并且将后端的manage.py、前端的package.json等项目文件复制到对应的本地目录中,再重新运行docker compose up。

解决方法3:使用bind mount同步代码(开发环境)

将本地的frontend和backend目录直接挂载到容器的工作目录,而不是./data下的目录:

修改docker-compose.yml的volumes部分:

services:
  backend:
    # ...其他配置
    volumes:
      - ./backend:/backend_app
  frontend:
    # ...其他配置
    volumes:
      - ./frontend:/frontend_app

这样本地修改代码后,容器内的代码会实时更新,同时确保容器能找到所需文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:49