2017-11-13 2 views
4

セロリタスクを使用するDjangoアプリケーションを実行しているドッキング設定があります。セロリはブローカーとしてレディスを使用します。ドッカーインスタンスでredisに接続できないセラー作業者

バージョン:

  • ドッカーバージョン17.09.0-CE、afdb6d4
  • ドッキングウィンドウ・コンバージョン1.15.0をビルドし、e12f3b9
  • のDjango == 1.9.6
  • ジャンゴを構築-celery-beat == 1.0.1
  • セロリ== 4.1.0
  • セロリ[redis]
  • Redisの== 2.10.5

問題:6379:

マイセロリの労働者がローカルホストにあるRedisのコンテナに接続できないように見えます。私は指定されたポート上のredisサーバにtelnetで接続することができます。私はredis-serverがコンテナ上で動作していることを確認することができます。

私は手動で私は予告を得るセロリドッキングウィンドウのインスタンスに接続し、コマンドcelery -A backend worker -l infoを使用して作業員を作成しようとする:

[2017-11-13 18:07:50,937: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 99 connecting to localhost:6379. Cannot assign requested address.. Trying again in 4.00 seconds...

注:

私はtelnetのにできていますポート6379のredisコンテナに転送します。redisコンテナでは、redis-serverが実行されています。

他にも何かがありますか?私はウサギの穴のかなり遠くに行ってきましたが、本当にシンプルなものを見逃しているように感じます。

ドッカーCONFIG FILES:

ドッキングウィンドウ-compose.common.yml here
あなたがドッキングウィンドウ-コンを使用する場合は、あなたがあることを行っていないhere

+0

てみてください'localhost'を' 127.0.0.1'に置き換えます – warvariuc

+0

あなたはドッカーを作成していますか? ile?共有する。 – Opal

+0

@Opalは投稿の末尾に設定ファイルを追加しました。 – Jared

答えて

6

ドッカ-compose.dev.ymlコンテナ間通信にlocalhostを使用すると、コンテナの構成割当ホスト名が使用されます。この場合、redisコンテナのホスト名はredisです。 services:の最上位レベルの要素は、デフォルトのホスト名です。

セロリーを赤目に接続するには、redis://redis:6379/0を試してください。プロトコルとサービス名は同じなので、私はもう少し詳しく説明します:あなたのドッカー作成でredisサービス "butter-pecan-redis"という名前を付けた場合は、代わりにredis://butter-pecan-redis:6379/0を使用します。

また、docker-compose.dev.ymlは一般的なネットワーク上でセロリと赤い線を持つようには見えないため、お互いに見えなくなる可能性があります。私は彼らがそれぞれのホスト名を解決するためには、共通の少なくとも1つのネットワークを共有する必要があると思います。

Networking in docker-composeには、最初の一握りの段落の例があります。ドッカーの作成です。見るべきyml。

+0

彼らは共通のネットワークを共有していないため、この問題の解決に役立ちました。 – Jared

2

ドッキング用ファイルにlinkdepends_onセクションを追加してから、ホスト名でコンテナを参照する必要があります。

ドッカ-compose.ymlを更新:

version: '2.1' 
services: 
    db: 
     image: postgres 
    memcached: 
     image: memcached 
    redis: 
     image: redis 
     ports: 
      - '6379:6379' 
    backend-base: 
     build: 
      context: . 
      dockerfile: backend/Dockerfile-base 
     image: "/backend:base" 
    backend: 
     build: 
      context: . 
      dockerfile: backend/Dockerfile 
     image: "/backend:${ENV:-local}" 
     command: ./wait-for-it.sh db:5432 -- gunicorn backend.wsgi:application -b 0.0.0.0:8000 -k gevent -w 3 
     ports: 
      - 8000 
     links: 
      - db 
      - redis 
      - memcached 
     depends_on: 
      - db 
      - redis 
      - memcached 
    celery: 
     image: "/backend:${ENV:-local}" 
     command: ./wait-for-it.sh db:5432 -- celery worker -E -B --loglevel=INFO --concurrency=1 
     environment: 
      C_FORCE_ROOT: "yes" 
     links: 
      - db 
      - redis 
      - memcached 
     depends_on: 
      - db 
      - redis 
      - memcached 
    frontend-base: 
     build: 
      context: . 
      dockerfile: frontend/Dockerfile-base 
      args: 
       NPM_REGISTRY: http://.view.build 
       PACKAGE_INSTALLER: yarn 
     image: "/frontend:base" 
     links: 
      - db 
      - redis 
      - memcached 
     depends_on: 
      - db 
      - redis 
      - memcached 
    frontend: 
     build: 
      context: . 
      dockerfile: frontend/Dockerfile 
     image: "/frontend:${ENV:-local}" 
     command: 'bash -c ''gulp''' 
     working_dir: /app/user 
     environment: 
      PORT: 3000 
     links: 
      - db 
      - redis 
      - memcached 
     depends_on: 
      - db 
      - redis 
      - memcached 

続いてなどのRedis、postgresの、memcachedの、へのURLを設定します。

関連する問題