簡體   English   中英

python3: 無法打開文件 '/app/manage.py': [Errno 2] 沒有那個文件或目錄

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

我是 docker 的新手,我嘗試在 docker 容器上運行 django。 但是,在我運行“docker-compose up -d”命令后出現錯誤

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

顯示在docker。由於代碼在mac os中貌似可以成功運行,我懷疑是不是我目前運行文件的Windows11的問題。

我的問題是: 1.為什么會出現這個錯誤? 2.我該如何解決?

dockerfile:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app/

docker-compose 文件

version: '3'
services:
web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db

我的項目目錄結構:

├── project
|   ├──project
│       ├── __init__.py
│       ├── asgi.py
|       ├── setting.py
|       ├── urls.py
│       └── wsgi.py
|   ├── manage.py
├── docker-compose.yml
├── Dockerfile
└── requirements.txt

我試圖解決這個問題幾個小時,但我搜索的解決方案沒有用。 希望有人能幫忙。 非常感謝你!!

您應該像這樣更改 docker-compose 文件命令,因為 manage.py 文件存在於項目文件夾中。

version: '3'
services:
web:
    build: .
    command: python3 project/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db

您的 Dockerfile 正在將當前目錄樹復制到圖像的/app目錄中,這很正常。 當 Compose command: override 運行時,您仍在該/app目錄中,但您的應用程序代碼位於project子目錄中。

你應該能夠看到這個啟動臨時容器來查看圖像中構建的文件系統,比如

docker-compose run web ls
docker-compose run web ls ./project

有幾種方法可以解決這個問題( @Divyessh 的回答也應該有效),但最直接的可能是在運行容器時使project子目錄成為當前目錄。 CMD中也是一個更好的做法,這樣您就可以獨立docker run圖像而無需其 Compose 設置。

FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /app              # creates the directory, don't need to RUN mkdir
COPY requirements.txt ./  # shorter and safer to COPY into current directory
RUN pip install -r requirements.txt
COPY ./ ./

# add the following
WORKDIR /app/project      # switch to project subdirectory
EXPOSE 8000               # document container-side port
CMD python3 ./manage.py runserver 0.0.0.0:8000  # standard command to run

在您的docker-compose.yml文件中,您不需要command:它與 Dockerfile CMD相同)或volumes:塊(這將導致圖像中的代碼被忽略並替換為其他內容)我會刪除這些線。

version: '3.8'  # "3" means "3.0"
services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM