【发布时间】:2016-05-22 21:34:31
【问题描述】:
我已将我的 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 配置本身。
【问题讨论】:
-
这些选项没有帮助:redis-server --bind 0.0.0.0
-
首先你不应该期望通过 0.0.0.0 卷曲或连接到任何服务器,因为这不是 TCP 的工作方式。该地址表示“任何”,并且仅在绑定未连接时才有效。其次,您不想卷曲到 Redis,因为它不是 http 服务器。
-
感谢 The Real Bill,如果不使用 curl,我将如何解决这些连接问题?干杯
-
使用 redis-cli 或 telnet
标签: ruby-on-rails docker redis docker-compose