web-dev-qa-db-ja.com

Docker Composeを使用してRedisコンテナーに接続する方法は?

この_docker-compose.yml_は正常に動作するようです:

_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アプリは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アプリのRedis URLとは何ですか?

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

編集:

@Andy Shinnのおかげで、redisのURLは_redis://6379_になっているはずです。
今、Errno::EINVAL - Invalid argument - connect(2) for 0.0.24.235:6379を取得しました。これはRedis v 3.2.8に関係している可能性があります。別のバージョンを試して、動作するかどうかを確認します。

編集#2:

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

13
B Seven

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

ENV REDIS_URL redis:6379

ただし、Redis URLはliteralredisで始まる必要があります。

そのため、修正プログラムはdocker composeを更新しています。

redis_db:
  image: redis:3.2.8

望ましい構成は次のとおりです。

REDIS_URL=redis://redis_db:6379

BMitchとAndy Shinnがこれを理解してくれてありがとう。

19
B Seven