我正在尝试从运行Go服务器的容器连接到我的Redis容器,但是尽管docker-compose.yml中的设置似乎正确,但连接仍然被拒绝:
redisClient = redis.NewClient(&redis.Options{
Network: "tcp",
Addr: "redis_server:6379",
Password: "", // no password set
DB: 0, // use default DB
})
version: "0.1"
services:
redis_server:
image: "redis"
ports:
- "6379:6379"
lambda_server:
build: .
ports:
- "8080:50051"
links:
- redis_server
答案 0 :(得分:2)
默认情况下,Redis不允许远程连接。您只能从运行Redis的计算机127.0.0.1(localhost)连接到Redis服务器。
在/etc/redis/redis.conf文件中将bind 127.0.0.1
替换为bind 0.0.0.0
。
然后运行sudo service redis-server restart
重新启动服务器。
使用以下命令来验证redis正在侦听端口6379上的所有接口:
ss -an | grep 6379
您应该看到类似下面的内容。 0.0.0.0表示计算机上的所有IPv4地址。
tcp LISTEN 0 128 0.0.0.0:6379 0.0.0.0:*
tcp LISTEN 0 128 [::]:6379 [::]:*
如果这不能解决问题,则可能需要检查所有可能阻止访问的防火墙。
答案 1 :(得分:0)
我遇到了类似的问题,这与地址绑定有关。在redis配置文件/etc/redis/redis.conf中,找到前缀为bind
的行。通常,此行包含bind 127.0.0.1
。这意味着,仅从与redis服务器(在您的情况下为redis服务器容器)相同的主机中接受客户端连接。
如果要接受客户端连接,则需要在此绑定定义行中添加客户端容器的主机名或主机ip。
bind 127.0.0.1 <client-ip or client-hostname>
另一种实现此目的的方法是通过以下方式绑定任何地址
bind 0.0.0.0
在任何一种情况下,您都需要使用更改后的redis.conf
重新启动Redis服务器。
从redis.conf文件中,我们可以看到以下内容:
# By default, if no "bind" configuration directive is specified, Redis listens # for connections from all the network interfaces available on the server. # It is possible to listen to just one or multiple selected interfaces using # the "bind" configuration directive, followed by one or more IP addresses. # # Examples: # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 # # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the # internet, binding to all the interfaces is dangerous and will expose the # instance to everybody on the internet. So by default we uncomment the # following bind directive, that will force Redis to listen only into # the IPv4 loopback interface address (this means Redis will be able to # accept connections only from clients running into the same computer it # is running). # # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES # JUST COMMENT THE FOLLOWING LINE. bind 127.0.0.1
您可以看到绑定地址默认为127.0.0.1。因此,根据您的情况,您可以指定地址或注释行。