web-dev-qa-db-fra.com

Comment se connecter à un conteneur Redis à l'aide de Docker Compose?

Ce docker-compose.yml Semble fonctionner correctement:

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

Commander:

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

L'application Web attend une configuration REDIS_URL. Dockerfile de l'application Web:

ENV REDIS_URL redis:6379

Il semble que la Web App ne puisse pas se connecter au Redis:

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

Alors, quelle est l'URL Redis pour l'application Web?

Dois-je exposer le port Redis (6379)?

MODIFIER:

Grâce à @Andy Shinn, je vois que l'url redis devrait être redis://6379.
Maintenant, j'obtiens Errno::EINVAL - Invalid argument - connect(2) for 0.0.24.235:6379. Cela peut être lié à Redis v 3.2.8. Je vais essayer une autre version et voir si cela fonctionne.

EDIT # 2:

3.2.8 fonctionne bien avec l'application sur ma machine locale, ce n'est donc pas le problème.

13
B Seven

Le problème est que redis est une "variable" qui sera interpolée dans le Dockerfile.

ENV REDIS_URL redis:6379

Mais l'URL Redis doit commencer par le littéral redis.

Ainsi, le correctif met à jour la composition du docker:

redis_db:
  image: redis:3.2.8

La configuration souhaitée est:

REDIS_URL=redis://redis_db:6379

Merci à BMitch et Andy Shinn de m'avoir aidé à comprendre cela.

19
B Seven