为什么当我运行 docker compose up 时 docker 找不到我的文件

问题描述 投票:0回答:1

我有一个用于后端的 Django 应用程序和一个用于前端的 Vue 应用程序。该应用程序在我的本地计算机上 100% 运行。我正在尝试对应用程序进行 docker 化,以便我可以将其部署在 VPS 上供其他人查看。

当我运行 docker compose up 时,前端启动,但后端每次都会给我同样的错误:

python3: can't open file '/app/manage.py': [Errno 2] No such file or directory

我的目录结构如下:

back (directory)
... (django apps directories)
-- manage.py
-- Dockerfile
-- requirements.txt

front (directory)
... (vue directories)
-- Dockerfile
-- package.json
-- vite.config.js
-- index.html

这是我的后端 Dockerfile:

FROM python:3.10

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . back

EXPOSE 8000

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

这是我的前端 Dockerfile:

FROM node:20-alpine3.17

WORKDIR /app

COPY package.json /app/
RUN npm install 

COPY . front/

EXPOSE 8080

CMD ["npm", "run", "dev:docker"]

这是我的 docker-compose.yml 文件:

version: "1.1"

services:
  db:
    image: postgres:15-alpine
    volumes:
      - ./db:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=postgres
  back:
    build: ./back
    ports:
      - "8000:8000"
    volumes:
      - ./:/back
    env_file: ./back/.env
    command: python3 manage.py runserver 0.0.0.0:8000
    depends_on:
      - db
    restart: on-failure
  front:
    build: ./front
    ports:
      - "8080:8080"
    volumes:
      - ../front/src:/front/src
    environment:
      - CHOKIDAR_USEPOLLING=true
    command: npm run dev
    depends_on:
      - back

所以我有两个问题:

  1. 为什么我会收到找不到文件错误?
  2. 当我在 VPS 上部署工作 Docker 映像时,如何使其在端口 80 上可用,以便如果我将我的域指向 VPS,我将看到完整的站点?

感谢您的帮助。

django docker
1个回答
0
投票

将 compose 文件中的后端服务命令更新为:

command: python3 back/manage.py runserver 0.0.0.0:8000

再次运行

docker compose up --build

原因如下。

后端 Dockerfile 中的

COPY . back
:这会将当前目录的内容复制到 Docker 容器中
back
目录(根据
/app
)内名为
WORKDIR
的目录中。所以,目录将是
/app/back

command: python3 manage.py runserver 0.0.0.0:8000
在撰写文件

此命令假定

manage.py
文件位于容器内应用程序的根目录中。但是,根据您的配置,该目录应该是
app/back

将命令更新为此应该有效:

command: python3 back/manage.py runserver 0.0.0.0:8000

© www.soinside.com 2019 - 2024. All rights reserved.