我有一个 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
解决了这个问题。
关于ruby - 无法从 Docker 容器内连接到 Redis (Redis::CannotConnectError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46436780/