繁体   English   中英

docker-compose:容器之间拒绝redis连接

[英]docker-compose: redis connection refused between containers

我正在尝试设置一个docker-compose文件,该文件旨在用Supervisor替换运行多个进程(RQ worker,RQ仪表板和Flask应用程序)的单个Docker容器解决方案。

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

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

“rq-worker1”是一个Python RQ工作者 ,尝试通过localhost和端口6379连接到redis,但是无法建立连接:

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

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

这是我的docker info输出:

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

有谁知道为什么两个容器之间的连接不起作用?

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

此时应更换localhostredis在配置rq-worker1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM