docker-compose: соединение redis отказано между контейнерами
Я пытаюсь настроить файл docker-compose, который предназначен для замены одного решения контейнера Docker, которое запускает несколько процессов (RQ worker, RQ dashboard и приложение Flask) с руководитель.
хост-система-это Debian 8 Linux и my 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, пытаясь подключиться к redis через localhost и порт 6379, но он не может установить соединение:
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 против локального IPs 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
есть ли у кого-нибудь идея, почему соединение между двумя контейнерами не работает?
1 ответов
код localhost
с rq-worker1
is , а не redis
и вы не можете достичь redis:6379
путем подключения к localhost
с rq-worker1
. Но по умолчанию redis
и rq-worker1
в том же сеть и вы можете использовать имя службы в качестве доменных имен в этой сети.
Это означает, что вы можете подключиться к redis
сервис от rq-worker1
С помощью redis
в качестве доменного имени, например:client.connect(("redis", 6379))
вы должны заменить localhost
с redis
в конфиг rq-worker1
.