【问题标题】:Unable to connect to Scrapyd web interface in Docker container from host无法从主机连接到 Docker 容器中的 Scrapyd Web 界面
【发布时间】: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 的答案...这很奇怪。它应该工作

标签: python docker scrapyd


【解决方案1】:

原来问题是我不小心在 scrapy.cfg 文件中注释掉了我的 url 变量。不要忘记取消注释该变量!

url = http://localhost:8080/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多