docker compose python:can';t打开文件'/main.py';:[Errno 2]没有这样的文件或目录

docker compose python:can';t打开文件'/main.py';:[Errno 2]没有这样的文件或目录,docker,docker-compose,dockerfile,docker-for-windows,Docker,Docker Compose,Dockerfile,Docker For Windows,这是我的Dockerfile: FROM python:3.8-slim WORKDIR /proxy-scraper-checker-master RUN apt-get update && \ apt-get install -y --no-install-recommends libc-dev COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . /

这是我的Dockerfile:

FROM python:3.8-slim

WORKDIR /proxy-scraper-checker-master

RUN apt-get update && \
    apt-get install -y --no-install-recommends libc-dev

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . /proxy-scraper-checker-master
CMD [ "python", "main.py" ]
这是我的docker-compose.yml:

version: "3.3"

services:
    proxy-app:
        build:
            context: .
            dockerfile: Dockerfile
        container_name: proxy-app
这是我的项目目录的结构(我从中运行docker命令):

当我在上述目录中运行以下命令时:

码头工人整理

我收到以下错误消息:

C:\Projects\myprojects\docker-example>docker-compose up
Creating proxy-app ... done
Attaching to proxy-app
proxy-app    | python: can't open file './main.py': [Errno 2] No such file or directory
proxy-app exited with code 2

有人能告诉我我做错了什么吗?

问题就在眼前

COPY . /proxy-scraper-checker-master
CMD [ "python", "main.py" ]
您正在将整个目录复制到
/proxy scraper checker master
,因此您的
main.py
文件将是
/proxy scraper checker master/proxy scraper checker master/main.py

要对此进行调试,可以在容器中输入一个bash终端,并在目录结构中查找
main.py
docker compose
将生成图像,因此您可以使用
docker images
查找图像名称,也可以重建图像

jakub@dash:/tmp/so$ docker build --tag my_python .
jakub@dash:/tmp/so$ docker run --rm -it my_python bash
# At this point, we are inside the Docker container.
root@924a7f854119:/proxy-scraper-checker-master# pwd
/proxy-scraper-checker-master
root@924a7f854119:/proxy-scraper-checker-master# ls
Dockerfile  docker-compose.yml  proxy-scraper-checker-master  requirements.txt
root@924a7f854119:/proxy-scraper-checker-master# realpath proxy-scraper-checker-master/main.py 
/proxy-scraper-checker-master/proxy-scraper-checker-master/main.py
此时,我们找到了
main.py
的路径。要修复原始问题,我们可以将Dockerfile中的
CMD
更改为以下内容:

CMD [ "python", "/proxy-scraper-checker-master/proxy-scraper-checker-master/main.py" ]
我们可以改进Dockerfile,以删除冗余的
复制
指令。使用下面的Dockerfile,到
main.py
的绝对路径是
/app/proxy/master/main.py
。我们可以使用相对路径
proxy scraper checker master/main.py
引用它,因为我们当前处于
/app
(感谢
WORKDIR
指令)。我们也可以用绝对路径来引用它

FROM python:3.8-slim

RUN apt-get update && \
    apt-get install -y --no-install-recommends libc-dev

WORKDIR /app

COPY . .

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

CMD [ "python", "proxy-scraper-checker-master/main.py" ]

我建议您阅读以了解其行为。

谢谢您的回复,但我尝试了这两项更改,错误仍然存在。请将shell放入您的容器中,查看您的
main.py
文件的位置。我是docker的新手,如果我的容器甚至无法运行,我该如何做呢?我已将您的答案标记为正确,确实如此。通过bash调试,您为我找到了解决问题的正确途径。我还修改了您对Dockerfile配置的建议,因为它更有意义,并且具有更少的层。再次感谢!
FROM python:3.8-slim

RUN apt-get update && \
    apt-get install -y --no-install-recommends libc-dev

WORKDIR /app

COPY . .

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

CMD [ "python", "proxy-scraper-checker-master/main.py" ]