2017-02-21 11 views
4

docker-compose.yml Это, кажется, работает OK:Как подключиться к контейнеру Redis с помощью Docker Compose?

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 

Веб-приложение ожидает REDIS_URL конфигурации. Web App Dockerfile:

ENV REDIS_URL redis:6379 

кажется, что веб-приложение не может подключиться к Redis:

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

Итак, что URL-адрес Redis для веб-приложения?

Нужно ли открывать порт Redis (6379)?

EDIT:

Благодаря @Andy Шинн, я вижу Redis гиперссылка должна быть 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

Редис работает в этой точке? Что произойдет, если вы запустите их все, а затем перезапустите 'web' после бит -> таким образом, вы знаете, что' redis' был запущен. – Nanne

+2

Эта ошибка говорит, что служба 'web' пытается подключиться к redis на локальном IP (127.0.0.1), а не' REDIS_URL', который должен быть DNS-именем «redis» из ссылки. Что это за приложение? Он предназначен для использования 'REDIS_URL'? Было бы полезно опубликовать немного больше о приложении ('Dockerfile', как он использует' REDIS_URL' и т. Д.). –

+0

Да, он настроен на использование 'REDIS_URL'. Это приложение Sinatra. Другие конфигурации работают, а у продукта есть «REDIS_URL». –

ответ

7

Проблема заключается в том, что redis является «переменной», которая будет интерполирована в файле Docker.

ENV REDIS_URL redis:6379 

Но URL Redis должен начинаться с буквальногоredis.

Таким образом, исправление обновляет Docker Compose:

redis_db: 
    image: redis:3.2.8 

Желаемая конфигурация является:

REDIS_URL=redis://redis_db:6379 

Благодаря BMitch и Энди Шинн помогли мне понять это.

+0

FWIW, URL-адрес Mongo может иметь такую ​​же проблему, потому что они начинаются с 'mongodb: //'. –

+0

Вы знаете, как выглядит REDIS_URL, если я задаю пароль? –

Смежные вопросы