请教:Redis Desktop Manager成功链接,但Scrapy-redis 被拒绝,错误代码: 111

新手上路,请多包涵

我使用如下命令运行了一个redis容器:

docker run  --name redis_env --hostname redis \
            -p 6379:6379 \
            -v $PWD/DBVOL/redis/data:/data:rw \
            --privileged=true \
            -d redis redis-server

我在本机成功的使用Redis Desktop Manager 链接了这个Redis 服务器,但是当我按照文档使用scrapy-redis搭建分布式爬虫的时候,却得到了拒绝连接的错误提示:

clipboard.png

我的settings.py配置为:

# Redis Server设置
REDIS_URL = 'redis://127.0.0.1:6379/0'

# 启用Redis调度存储请求队列
SCHEDULER = 'scrapy_redis.scheduler.Scheduler'

# 确保所有的爬虫都通过redis去重
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'

# 不清除Redis队列、这样可以暂停/恢复 爬取
SCHEDULER_PERSIST = True

# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html

ITEM_PIPELINES = {
   #'GeoCrawler.pipelines.GeocrawlerPipeline': 300,
    'scrapy_redis.pipelines.RedisPipeline': 300
}

我还尝试了直接使用python console链接redis server,也是没有问题的:

>>> import redis
>>> redis.connection("redis://localhost:6379/0")
Connection<host=redis://localhost:6379/0,port=6379,db=0>

请问这到底是什么原因?如何解决?请各位大神不吝赐教,感谢!!!

阅读 2.7k
2 个回答
新手上路,请多包涵

问题找到了,是容器的ip问题,容器的ip不对,运行:

docker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

得到容器的ip 填进链接字符串就可以了。但我还是不明白,why?我的rdm填写127.0.0.1:6379就可以成功链接?

scrapy 和 redis 是跑在不同的容器里的吧。 redis 的 127.0.0.1 和 scrapy 的 127.0.0.1 不是同一个容器,不是同一个内网 ip。
这里如果想在 scrapy 的容器中连接 redis 的话,配置的 ip 应该写 redis 容器的 ip 或者宿主机的 ip 地址都是可以的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题