2017-02-21 28 views
4

このdocker-compose.ymlがOKを動作するようです:Docker Composeを使用してRedisコンテナに接続するには?

version: '3' 
services: 
    web: 
    image: web-app 
    command: bundle exec rackup 
    ports: 
    - "9292:9292" 
    links: 
     - redis 
    redis: 
    image: redis 

コマンド:

docker build -t web-app .; docker-compose up 

Web AppではREDIS_URLの設定を期待しています。 WebアプリケーションDockerfile:

ENV REDIS_URL redis:6379 

Webアプリケーションは、Redisのに接続できないようです。

Redis::CannotConnectError - Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED): 

ので、Web AppのRedisのURLは何ですか?

Redisポート(6379)を公開する必要がありますか?

EDIT:@Andyシンへ

おかげで、私はRedisのURLがredis://6379する必要があります参照してください。
今度はErrno::EINVAL - Invalid argument - connect(2) for 0.0.24.235:6379となります。これはRedis v 3.2.8と関係があります。私は別のバージョンを試して、それが動作するかどうかを見てみましょう。

EDIT#2:

3.2.8は私のローカルマシン上のアプリで正常に動作するので、それは問題ではありません。

+0

その時点でredisが実行されていますか?もしあなたがそれらをすべて起動してから、 'red'が開始されたことを知っているなら、少し後に' web'を再起動してください。 – Nanne

+2

このエラーは、 'web'サービスがリンクからの' redis' DNS名である 'REDIS_URL'ではなく、ローカルIP(127.0.0.1)でredisに接続しようとしていると言います。どのような用途ですか? 'REDIS_URL'を使うように設計されていますか?アプリケーション( 'Dockerfile'、' REDIS_URL'などの使用方法)についてもう少し詳しく説明すると役に立ちます。 –

+0

はい、 'REDIS_URL'を使用するように設定されています。これはSinatraアプリです。他のconfigsが動作し、プロダクションに 'REDIS_URL'があります。 –

答えて

7

問題はredisがDockerfileで補間される「可変」であることです。

ENV REDIS_URL redis:6379 

しかし、RedisのURLはredisリテラルで開始する必要があります。

ので、修正がドッキングウィンドウのコンを更新している:

redis_db: 
    image: redis:3.2.8 

希望configがある:私はこれを理解助けるためBMitchとアンディ・シンへ

REDIS_URL=redis://redis_db:6379 

感謝。

+0

FWIW、Mongo URLは 'mongodb://'で始まるので同じ問題があります。 –

+0

パスワードを設定するとREDIS_URLがどのように見えるのですか? –

関連する問題