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

我试图设置一个docker-compose文件,目的是用Supervisorreplace一个运行多个进程(RQ worker,RQ仪表板和Flask应用程序)的Docker容器解决scheme。

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

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

“rq-worker1”是一个Python RQ worker ,试图通过本地主机和端口6379连接到redis,但是无法build立连接:

 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 

我尝试了从本地IP 0.0.0.0 / 127.0.0.1甚至本地主机上运行RQ worker的一切。 发布在Stackoverflow上的其他解决scheme也不适用于我( 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在同一个networking中 ,您可以使用服务名称作为该networking中的域名。 这意味着,您可以使用redis作为域名连接到rq-worker1 redis服务,例如: client.connect(("redis", 6379))

您应该在rq-worker1configuration中用redisreplacelocalhost