我正在尝试设置一个 docker-compose 文件,该文件旨在用 Supervisor 替换运行多个进程(RQ 工作程序、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 worker ,尝试通过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
我尝试了所有方法,从针对本地 IP 0.0.0.0/127.0.0.1 甚至 localhost 运行 RQ 工作程序。 Stackoverflow 上发布的其他解决方案也不适用于我(例如 docker-compose: connection refused between containers, but service accessible from host)。
这是我的 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
有谁知道为什么两个容器之间的连接不起作用?
最佳答案
在您的代码 localhost
来自 rq-worker1
是 rq-worker1
本身,而不是 redis
并且您可以'通过从 rq-worker1
连接到 localhost
无法到达 redis:6379
。但是默认情况下 redis
和 rq-worker1
在同一个 network并且您可以使用服务名称作为该网络中的域名。
这意味着,您可以使用 redis
作为域名从 rq-worker1
连接到 redis
服务,例如:client。连接((“redis”,6379))
您应该在 rq-worker1
的配置中将 localhost
替换为 redis
。
关于python - docker 撰写 : redis connection refused between containers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41302791/