首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从Docker容器中连接到Redis (Redis::CannotConnectError)

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

Stack Overflow用户
提问于 2017-09-26 22:34:36
回答 1查看 1.1K关注 0票数 0

我有一个Jenkins管道,它在Docker容器中运行Sinatra应用程序的所有测试。

这是管道的样子:

代码语言:javascript
运行
复制
#!/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,我似乎无法从包含运行测试的Docker内部连接到Redis。Redis db运行在另一个可访问的远程服务器上。

我使用redis-rb和下面的代码访问Redis:

代码语言:javascript
运行
复制
REDIS_DB = Redis.new(url: 'redis://:strongpassword123@server_ip:6379')

但是,测试返回时会出现以下错误:

代码语言:javascript
运行
复制
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服务器,但这也没有帮助。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-27 20:33:11

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

因此,做sudo ufw allow from 172.17.0.2 to any port 6379解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46436780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档