容器将无法连接到Redis容器

时间:2019-08-15 19:27:45

标签: docker go redis

我正在尝试从运行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
    })

docker-compose

version: "0.1"
services:
  redis_server:
    image: "redis"
    ports:
      - "6379:6379"
  lambda_server:
    build: .
    ports:
      - "8080:50051"
    links:
      - redis_server

2 个答案:

答案 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。因此,根据您的情况,您可以指定地址或注释行。