如何使用Docker Compose连接到Redis容器?

B S*_*ven 13 redis docker docker-compose

这docker-compose.yml似乎工作正常:

version: '3'
services:
  web:
    image: web-app
    command: bundle exec rackup
    ports:
     - "9292:9292"
    links:
      - redis
  redis:
    image: redis
Run Code Online (Sandbox Code Playgroud)

命令:

docker build -t web-app .; docker-compose up
Run Code Online (Sandbox Code Playgroud)

Web App期待REDIS_URL配置.Web App Dockerfile:

ENV REDIS_URL redis:6379
Run Code Online (Sandbox Code Playgroud)

似乎Web App无法连接到Redis:

Redis::CannotConnectError - Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED):
Run Code Online (Sandbox Code Playgroud)

那么,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适用于我本地计算机上的应用程序,因此不是问题.

B S*_*ven 20

问题是redis将在Dockerfile中插入的"变量".

ENV REDIS_URL redis:6379
Run Code Online (Sandbox Code Playgroud)

但是Redis URL应该以文字 开头redis.

所以,修复程序正在更新docker compose:

redis_db:
  image: redis:3.2.8
Run Code Online (Sandbox Code Playgroud)

所需的配置是:

REDIS_URL=redis://redis_db:6379
Run Code Online (Sandbox Code Playgroud)

感谢BMitch和Andy Shinn帮助我解决这个问题.

  • FWIW,Mongo URL 可能有同样的问题,因为它们以“mongodb://”开头。 (2认同)
  • 如果我设置了密码,你知道 REDIS_URL 的样子吗? (2认同)
  • @calvin redis://用户:secret@localhost:6379/0?foo=bar&qux=baz (2认同)