Проблема в строках.
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
.
To отладите это, вы можете ввести терминал 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
. Чтобы исправить исходную проблему, мы можем изменить CMD
в Dockerfile на следующее:
CMD [ "python", "/proxy-scraper-checker-master/proxy-scraper-checker-master/main.py" ]
Мы можем улучшить Dockerfile, чтобы удалить повторяющиеся COPY
инструкции. Используя приведенный ниже файл Dockerfile, абсолютный путь к main.py
равен /app/proxy-scraper-checker-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" ]
Я рекомендую прочитать COPY
документацию , чтобы понять его поведение.