ruby-on-rails - Docker-compose - Redis 位于 0.0.0.0 而不是 127.0.0.1

标签 ruby-on-rails docker redis docker-compose

我已经将我的 Rails 应用程序(本地开发机器)迁移到 Docker-Compose。除了 Worker Rails 实例(批处理)无法连接到 Redis 之外,一切正常。

Completed 500 Internal Server Error in 40ms (ActiveRecord: 2.3ms)

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

在我的 docker-compose.yml 中

redis:
  image: redis
  ports:
    - "6379:6379"

batch:
  build: .
  command: bundle exec rake environment resque:work QUEUE=*
  volumes:
    - .:/app
  links:
    - db
    - redis
  environment:
    - REDIS_URL=redis://redis:6379

我认为 Redis 实例可以通过 Docker 主机的 IP 访问。

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                       SWARM   DOCKER    ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.10.0

无法通过 0.0.0.0 访问

$ curl 0.0.0.0:6379 
curl: (7) Failed to connect to 0.0.0.0 port 6379: Connection refused

通过我认为可行的 docker-machine IP 访问:

$ curl http://192.168.99.100:6379
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:'

编辑

在批处理实例中安装 redis-cli 后,我能够使用“redis”主机名访问 redis 服务器。我认为问题可能出在 Rails 配置本身。

最佳答案

捂脸!!!

docker 容器通信正常,问题是我没有告诉 Resque(使用 Redis 的应用程序)在哪里可以找到它。感谢“The Real Bill”指出我应该使用 docker-cli。

对于任何其他使用 Docker 和 Resque 的人,您需要在您的config/initializers/resque.rb 文件中:

Resque.redis = Redis.new(host: 'redis', port: 6379)
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }

关于ruby-on-rails - Docker-compose - Redis 位于 0.0.0.0 而不是 127.0.0.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35350679/

相关文章:

performance - Redis 多数据库性能

redis - 如何删除redis zset?

ruby-on-rails - 如何在多态关联中获取特定类型的所有子项

ruby-on-rails - 没有 View 的 Rails ActionMailer

javascript - 在 Rails 应用程序中更改页面时,Google 图表消失

postgresql - 如何将 pgadmin 容器连接到主机系统 localhost postgres

android - 如何从移动应用程序与Redis服务器连接以对移动应用程序的Redis数据库执行不同的操作

ruby-on-rails - 如何在 Rails 和 RSpec 中测试 after_destroy 回调?

postgresql - 为什么 postgres 容器在 Gitlab CI 中忽略/docker-entrypoint-initdb.d/*

docker - Mesos上的Kubernetes,没有合适的报价