docker-compose:容器之间的Redis连接被拒绝 [英] docker-compose: redis connection refused between containers

查看:862
本文介绍了docker-compose:容器之间的Redis连接被拒绝的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试设置一个docker-compose文件,该文件旨在使用主管

I am trying to setup a docker-compose file that is intended to replace a single Docker container solution that runs several processes (RQ worker, RQ dashboard and a Flask application) with Supervisor.

主机系统是Debian 8 Linux和我的 docker-compose。 yml 看起来像这样(我删除了所有其他条目以减少错误源):

The host system is a Debian 8 Linux and my docker-compose.yml looks like this (I deleted all other entries to reduce error sources):

version: '2'
  services:
    redis:
      image: redis:latest
    rq-worker1:
      build: .
      command: /usr/local/bin/rqworker boo-uploads
      depends_on:
        - redis

rq-worker1是Python RQ工人,试图连接到Redis通过本地主机和端口6379,但无法建立连接:

"rq-worker1" is a Python RQ worker, trying to connect to redis via localhost and port 6379, but it fails to establish a connection:

redis_1       | 1:M 23 Dec 13:06:26.285 * The server is now ready to accept connections on port 6379
rq-worker1_1  | [2016-12-23 13:06] DEBUG: worker: Registering birth of worker d5cb16062fc0.1
rq-worker1_1  | Error 111 connecting to localhost:6379. Connection refused.
galileoqueue_rq-worker1_1 exited with code 1

docker的输出ps 看起来像这样:

CONTAINER ID        IMAGE               COMMAND                      CREATED             STATUS              PORTS               NAMES
36cac91670d2        redis:latest        "docker-entrypoint.sh"   14 minutes ago      Up About a minute   6379/tcp                galileoqueue_redis_1

I尝试了从针对本地IP 0.0.0.0 / 127.0.0.1甚至本地主机运行RQ工作器的所有操作。在Stackoverflow上发布的其他解决方案也不适用于我( docker-compose:容器之间的连接被拒绝,但是可以从主机访问服务例如)。

I tried everything from running the RQ worker against the local IPs 0.0.0.0 / 127.0.0.1 and even localhost. Other solutions posted on Stackoverflow didn't work for me, too (docker-compose: connection refused between containers, but service accessible from host e.g.).

这是我的 docker信息输出:

Containers: 25
  Running: 1
  Paused: 0
  Stopped: 24
Images: 485
Server Version: 1.12.5
Storage Driver: aufs
  Root Dir: /var/lib/docker/aufs
  Backing Filesystem: extfs
  Dirs: 436
  Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
  Volume: local
  Network: null bridge host overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options:
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 13.61 GiB
Name: gp-pc-201
ID: LBGV:K26G:UXXI:BWRH:OYVE:OQTA:N7LQ:I4DV:BTNH:FZEW:7XDD:WOCU

有人知道为什么两个容器之间的连接吗

Does anyone have an idea why the connect between the two containers doesn't work?

推荐答案

在您的代码 localhost 中,从 rq-worker1 rq-worker1 本身,而不是 redis 无法从 rq-worker1 localhost 来达到 redis:6379 c $ c>。但默认情况下, redis rq-worker1 在同一网络,您可以将服务名称用作该网络中的域名。
这意味着您可以使用 rq-worker1 连接到 redis 服务> redis 作为域名,例如: client.connect(( redis,6379))

In your code localhost from rq-worker1 is rq-worker1 itself, not redis and you can't reach redis:6379 by connect to localhost from rq-worker1. But by default redis and rq-worker1 are in the same network and you can use service name as a domain name in that network. It means, that you can connect to redis service from rq-worker1 using redis as a domain name, for instance: client.connect(("redis", 6379))

您应在 rq-的配置中将 localhost 替换为 redis worker1

You should replace localhost with redis in config of rq-worker1.

这篇关于docker-compose:容器之间的Redis连接被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆