无法从Docker容器内连接到Redis(Redis :: CannotConnectError)

我有一个Jenkinspipe道,它为Docker容器内的Sinatra应用程序运行所有testing。

这是Pipeline的样子:

#!/usr/bin/env groovy pipeline { agent { docker { image 'ruby' args '-u root -v /root/.ssh:/root/.ssh' } } stages { stage('Build') { steps { echo 'Building...' sh 'bundle install' } } stage('Test') { steps { echo 'Testing...' sh 'rspec spec' } } stage('Deploy') { steps { echo 'Deploy...' sh 'cap staging deploy' } } } } 

Sinatra应用程序使用Redis,我似乎无法从包含运行testing的Docker中连接到Redis。 Redis数据库运行在可访问的不同远程服务器上。

我正在使用redis-rb和以下代码来访问Redis:

 REDIS_DB = Redis.new(url: 'redis://:strongpassword123@server_ip:6379') 

但testing返回与以下错误:

 Redis::CannotConnectError: Error connecting to Redis on server_ip:6379 (Redis::TimeoutError) # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:344:in `rescue in establish_connection' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:329:in `establish_connection' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:99:in `block in connect' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:291:in `with_reconnect' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:98:in `connect' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:363:in `ensure_connected' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:219:in `block in process' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:304:in `logging' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:218:in `process' # /usr/local/bundle/gems/redis-4.0.0/lib/redis/client.rb:118:in `call' # /usr/local/bundle/gems/redis-4.0.0/lib/redis.rb:877:in `block in get' # /usr/local/bundle/gems/redis-4.0.0/lib/redis.rb:45:in `block in synchronize' # /usr/local/bundle/gems/redis-4.0.0/lib/redis.rb:45:in `synchronize' # /usr/local/bundle/gems/redis-4.0.0/lib/redis.rb:876:in `get' 

我试过使用本地的Redis服务器,但是也没有帮助。

我究竟做错了什么?

Docker容器的IP为172.17.0.2 。 由于我启用了UFW(防火墙),所以我不得不添加一个允许Docker通过端口6379连接到Redis的规则。

所以做sudo ufw allow from 172.17.0.2 to any port 6379解决了这个问题。