How to connect to a Redis container using Docker Compose?

37,706

The issue is that redis is "variable" that will be interpolated in the Dockerfile.

ENV REDIS_URL redis:6379

But the Redis URL should start with the literal redis.

So, the fix is updating the docker compose:

redis_db:
  image: redis:3.2.8

The desired config is:

REDIS_URL=redis://redis_db:6379

Thanks to BMitch and Andy Shinn for helping me figure this out.

Share:
37,706
B Seven
Author by

B Seven

Status: Hood Rails on HTTP/2: Rails HTTP/2 Rack Gems: Rack Crud Rack Routing Capybara Jasmine

Updated on February 23, 2020

Comments

  • B Seven
    B Seven about 4 years

    This docker-compose.yml seems to work OK:

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

    Command:

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

    The Web App is expecting a REDIS_URL config. Web App Dockerfile:

    ENV REDIS_URL redis:6379
    

    It seems that the Web App cannot connect to the Redis:

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

    So, what is the Redis URL for the Web App?

    Do I need to expose the Redis port (6379)?

    EDIT:

    Thanks to @Andy Shinn, I see the redis url should be redis://6379.
    Now I get Errno::EINVAL - Invalid argument - connect(2) for 0.0.24.235:6379. This may have to do with Redis v 3.2.8. I'll try another version and see if it works.

    EDIT #2:

    3.2.8 works fine with the app on my local machine, so that is not the issue.