我正在编写一个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 绑定挂载的工作原理。
2条答案
按热度按时间nr9pn0ug1#
希望您享受您的集装箱之旅!
由于我没有更多的信息来准确地再现你的情况,我只会建议你什么可以为你工作:
这里出现了一个错误,内容是:“未知命令:crawl”,它意味着docker二进制文件将scrapy命令的“crawl”参数解释为一个独立的命令。
若要避免这种情况,请不要执行:
您应该在“bash -c”中运行Scrapy命令,如下所示:
为您提供信息,您可以直接将VOLUME配置和您的入口点命令直接添加到您的dockerfile中,这样,您应该能够仅使用dockerrun-it(或-d)ufc-stats-scraper(cf https://kapeli.com/cheat_sheets/Dockerfile.docset/Contents/Resources/Documents/index)运行您的容器
希望这对你有帮助!bguess
k4aesqcs2#
问题是我在app/目录上挂载并删除了所有目录文件。我没有挂载app目录,而是在app目录中创建了一个新的数据文件夹并挂载了它。