繁体   English   中英

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

[英]Can't connect to Redis from within a Docker container (Redis::CannotConnectError)

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

这是管道的外观:

#!/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数据库在其他可访问的远程服务器上运行。

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

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

但是测试返回以下错误:

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进行sudo ufw allow from 172.17.0.2 to any port 6379解决了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM