装载Docker卷导致“Scrapy - no active project”(报废a无活动项目)

nx7onnlm  于 2022-11-09  发布在  Docker
关注(0)|答案(2)|浏览(188)

我正在编写一个python项目,为将来的ML项目收集数据。我决定在Docker中将我的项目容器化--下面是我的DockerFile

FROM python:3.9.12-slim-buster

WORKDIR /app

RUN apt-get update && apt-get install -y git

RUN pip3 install --upgrade pip

COPY requirements.txt requirements.txt

RUN pip install -r requirements.txt

ADD . /app

我可以运行以下命令,我的scraper将成功运行:

docker run -it  ufc-stats-scraper scrapy crawl ufc_future_fights -o future.csv -t csv

输出:

....
 'robotstxt/response_status_count/404': 1,
 'scheduler/dequeued': 53,
 'scheduler/dequeued/memory': 53,
 'scheduler/enqueued': 53,
 'scheduler/enqueued/memory': 53,
 'start_time': datetime.datetime(2022, 4, 20, 2, 4, 7, 365309)}
2022-04-20 02:04:08 [scrapy.core.engine] INFO: Spider closed (finished)

但是,被抓取的数据存储在将来的.csv文件中,该文件位于容器本地。我在网上看到我应该使用-v命令并挂载容器文件夹。下面是我尝试使用的命令:

docker run -it -v ${PWD}:/app ufc-stats-scraper scrapy crawl ufc_future_fights -o future.csv -t csv

但是,在运行此命令时,我收到以下错误消息:

Scrapy 2.6.1 - no active project

Unknown command: crawl

Use "scrapy" to see available command

我对Docker还是个新手,但我想知道是否有人能告诉我我在这里做错了什么。谢谢!
更新:
我在两个版本的Docker映像上启动了一个bash会话。一个会话被卸载,另一个被装载。应用程序文件夹包含了卸载会话中的所有repos文件。奇怪的是,在装载的会话中,应用程序文件夹完全是空的。这就解释了为什么错误消息显示“没有活动的项目”。我真的很困惑为什么装载的映像是空的。
我觉得我可能误解了 Docker 绑定挂载的工作原理。

nr9pn0ug

nr9pn0ug1#

希望您享受您的集装箱之旅!
由于我没有更多的信息来准确地再现你的情况,我只会建议你什么可以为你工作:
这里出现了一个错误,内容是:“未知命令:crawl”,它意味着docker二进制文件将scrapy命令的“crawl”参数解释为一个独立的命令。
若要避免这种情况,请不要执行:

docker run -it -v ${PWD}:/app ufc-stats-scraper scrapy crawl ufc_future_fights -o future.csv -t csv

您应该在“bash -c”中运行Scrapy命令,如下所示:

docker run -it -v ${PWD}:/app ufc-stats-scraper  bash -c "scrapy crawl ufc_future_fights -o future.csv -t csv"

为您提供信息,您可以直接将VOLUME配置和您的入口点命令直接添加到您的dockerfile中,这样,您应该能够仅使用dockerrun-it(或-d)ufc-stats-scraper(cf https://kapeli.com/cheat_sheets/Dockerfile.docset/Contents/Resources/Documents/index)运行您的容器
希望这对你有帮助!bguess

k4aesqcs

k4aesqcs2#

问题是我在app/目录上挂载并删除了所有目录文件。我没有挂载app目录,而是在app目录中创建了一个新的数据文件夹并挂载了它。

相关问题