2016-12-23 31 views
6

Tôi đang cố gắng thiết lập tệp docker-compose nhằm thay thế một giải pháp vùng chứa Docker duy nhất chạy một số quy trình (RQ worker, RQ dashboard và ứng dụng Flask) với Supervisor.docker-compose: kết nối redis bị từ chối giữa các vùng chứa

Các hệ thống máy chủ là một Debian 8 Linux và docker-compose.yml của tôi trông như thế này (tôi đã xóa tất cả các mục khác để giảm nguồn lỗi):

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

"RQ-worker1" là một Python RQ worker, cố gắng kết nối để redis qua localhost và port 6379, nhưng nó thất bại trong việc thiết lập kết nối:

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 

kết quả của docker ps trông như thế này:

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 

Tôi đã thử mọi thứ từ chạy nhân viên RQ đối với các IP cục bộ 0.0.0.0/127.0.0.1 và thậm chí cả localhost. Các giải pháp khác được đăng trên Stackoverflow cũng không hoạt động đối với tôi (docker-compose: connection refused between containers, but service accessible from host ví dụ:).

Và đây là docker info đầu ra của tôi:

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 

Có ai có một ý tưởng tại sao kết nối giữa hai container không hoạt động?

Trả lời

6

Trong mã của bạn localhost từ rq-worker1rq-worker1 chính nó, không redis và bạn không thể đạt redis:6379 bởi kết nối để localhost từ rq-worker1. Nhưng theo mặc định, redisrq-worker1 nằm trong cùng một network và bạn có thể sử dụng tên dịch vụ làm tên miền trong mạng đó. Điều đó có nghĩa, mà bạn có thể kết nối với dịch vụ redis từ rq-worker1 sử dụng redis như một tên miền, ví dụ: client.connect(("redis", 6379))

Bạn nên thay thế localhost với redis trong cấu hình của rq-worker1.

+0

Cảm ơn bạn! Điều đó giải quyết được lỗi kết nối. Tôi đã sử dụng tham số máy chủ cho tất cả các lệnh Python để kết nối với "redis" và nó hoạt động hoàn hảo. – henning82

Các vấn đề liên quan