2016-12-23 31 views
6

Supervisorで複数のプロセス(RQワーカー、RQダッシュボード、Flaskアプリケーション)を実行する単一のDockerコンテナソリューションを置き換えるドッカー作成ファイルをセットアップしようとしています。接続しようと、docker-compose:コンテナ間のredis接続が拒否されました

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です:

ホストシステムはDebianの8のLinuxで、私のdocker-compose.ymlはこのようになります(私は、誤差源を減らすために他のすべてのエントリを削除しました) 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ワーカーをローカルIP 0.0.0.0/127.0.0.1、さらにはローカルホストに対して実行してみました。 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 

誰もが二つの容器の間の接続がうまくいかない理由のアイデアを持っていますか? rq-worker1からあなたのコードlocalhost

答えて

6

rq-worker1自体、ないredisであり、あなたがrq-worker1からlocalhostへの接続によりredis:6379に到達することはできません。しかし、デフォルトではredisrq-worker1は同じnetworkにあり、サービス名をそのネットワークのドメイン名として使用できます。 それはあなたが、たとえば、ドメイン名としてredisを使用してrq-worker1からredisサービスに接続できることを、意味:client.connect(("redis", 6379))

あなたはrq-worker1の設定にredislocalhostを置き換える必要があります。

+0

ありがとうございました!それは接続エラーを解決しました。私は、すべてのPythonコマンドに "redis"に接続するためのホストパラメータを使用し、それは完全に動作します。 – henning82

関連する問題