【发布时间】:2021-11-27 23:33:18
【问题描述】:
我有 Django 和 Scrapyd 都在单独的容器中运行,Django 在我的主机的 localhost:8001 上工作得很好,但是当我尝试通过 localhost:8000 访问 Scrapyd 时,我从 Firefox 收到“连接重置”错误。我正在尝试将两个容器相互连接,已经存在一个 docker 网络。在我搬到 Docker 之前,这在我的主机上运行良好。我该如何解决这个问题?
码头工人撰写
docker-compose: version: "3.9"
services: web:
build: .\web
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .\web:/usr/src/remindme_web
ports:
- 8001:8000
scrapy:
build: .\scraper
command: scrapyd
volumes:
- .\scraper\:/usr/src/remindme_scraper/
ports:
- 8000:8080
Scraper docker 文件
FROM python:3.9
ENV PYTHONUNBUFFERED=1
WORKDIR /usr/src/remindme_scraper
COPY requirements.txt .
RUN pip install -r requirements.txt
WORKDIR /usr/src/remindme_scraper/remind_me_scraper
COPY . .
RUN ["apt-get", "update"]
RUN ["apt-get", "install", "-y", "vim-tiny"]
Scrapyd 日志
2021-10-07T21:21:03+0000 [-] Loading /usr/local/lib/python3.9/site-packages/scrapyd/txapp.py...
2021-10-07T21:21:03+0000 [-] Scrapyd web console available at http://127.0.0.1:8080/
2021-10-07T21:21:03+0000 [-] Loaded.
2021-10-07T21:21:03+0000 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 21.7.0 (/usr/local/bin/python 3.9.7) starting up.
2021-10-07T21:21:03+0000 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.epollreactor.EPollReactor.
2021-10-07T21:21:03+0000 [-] Site starting on 8080
2021-10-07T21:21:03+0000 [twisted.web.server.Site#info] Starting factory <twisted.web.server.Site object at 0x7f0882999b80>
2021-10-07T21:21:03+0000 [Launcher] Scrapyd 1.2.1 started: max_proc=48, runner='scrapyd.runner'
在 Django 应用程序中连接 API 的线路
scrapyd = ScrapydAPI('http://scrapy')
Scrapyd 配置
[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 4
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port = 8080
debug = off
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root
[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus
【问题讨论】:
-
当你说你试图将容器连接在一起时,你的意思是你想让django向scrapy发出请求?在 django 中,它被配置为向 localhost:8000 发出请求?
-
是的,我想向 Scrapyd api 发出请求,但不,在我的代码中,我正在尝试发出像 https:// scraper 这样的请求,因为 scraper 是我的 scraper 服务的主机名.
-
你能告诉我启动scraper api的python行吗?需要明确的是,目前您只是想让 localhost:8000 在您的浏览器而不是其他容器上工作?
-
是的,正确,但我宁愿让它在 Django 容器中工作。我已经在我的答案中添加了试图调用 API 的行。启动爬虫 API 的行位于 docker compose 中爬虫服务的命令部分,“scrapyd”。
-
您刚刚看到您将其绑定到 0.0.0.0 的答案...这很奇怪。它应该工作