我已经将我的Rails应用程序(本地开发机器)迁移到了。除了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)):在我的船坞里-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我认为通过对接机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配置本身。
发布于 2016-02-13 11:03:44
面部表情!
码头集装箱通讯很好,问题是我没有告诉Resque (使用Redis的应用程序)在哪里找到它。谢谢你的“真实法案”指出我应该使用码头-cli。
对于使用Docker和Resque的其他任何人,您需要在您的config/initializers/resque.rb文件中这样做:
Resque.redis = Redis.new(host: 'redis', port: 6379)
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }发布于 2016-02-11 22:26:34
如果你跑
docker-compose run --rm batch env | grep REDIS您将获得容器拥有的env变量(撰写过程中的链接行将自动生成一些变量)。那么你所需要做的就是寻找一个沿着_REDIS_1_PORT.并使用正确的。我从来没有幸运地以任何其他方式将我的铁路连接到另一个服务。但幸运的是,这些env变量总是在启动时生成的,因此它们将是最新的,即使容器IP在初创企业之间发生了变化。
发布于 2016-02-12 17:55:54
您应该使用主机名redis连接到服务,尽管您可能需要等待redis启动。
https://stackoverflow.com/questions/35350679
复制相似问题