我看到很多人都在苦苦挣扎,有点觉得redis容器图片中可能存在错误,而其他人似乎正在追逐类似的问题。
我在DockerHub上使用标准的redis图像。 (https://github.com/dockerfile/redis)
像这样运行:
docker run -it -p 6379:6379 redis bash
我可以启动服务器,然后从容器映像执行redis ping。
不幸的是,我无法从我的主机连接到redis容器。
我尝试过设置,如下所示。
bind 127.0.0.1
并从配置中删除了绑定
并尝试关闭保护模式
protected-mode no
我知道它正在读取配置文件,因为我更改了端口只是为了测试,我能够做到这一点。
我正在运行Windows 10,所以可能是Windows网络问题。我通常不会遇到码头工人的问题。我很疑惑
答案 0 :(得分:19)
问题在于你的绑定,你应该设置以下内容:
bind 0.0.0.0
这将设置redis
绑定到所有可用接口,在具有一个接口的容器化环境中(eth0
)和一个环回(lo
)redis将绑定到两个接口以上。您应该考虑通过config file
中的其他指令或使用firewalls
等外部工具添加安全措施。因为通过这种方法,每个人都可以连接到您的redis
服务器。
默认设置为bind 127.0.0.1
,此设置将使redis
仅侦听环回接口,并且只能从容器内部访问。 (为安全起见)
使用自定义配置文件运行redis:
sudo docker run -d --name redis-test -p 6379:6379 -v /path/to/redisconf/redis.conf:/redis.conf redis redis-server /redis.conf
现在验证安装了redis-tools
的docker主机:
sudo redis-cli
127.0.0.1:6379>
127.0.0.1:6379> set farhad likes:stackoverflow
OK
127.0.0.1:6379> get farhad
"likes:stackoverflow"
127.0.0.1:6379>
您还可以通过以下方式从外部主机连接到您的redis
容器:
redis-cli -h 'IP-address-of-dockerhost-running-redis-container'
答案 1 :(得分:13)
这是设置Redis容器的更简单方法。
docker run -d --name some-redis -p 6379:6379 redis
如果没有图像,此命令将其拉出。然后,如果您需要从 redis-cli 访问控制台,可以使用:
docker exec -it some-redis bash
要输入到容器控制台,并在控制台中输入
:root@72c388dc2cb8:/data# redis-cli
输出:
127.0.0.1:6379>
这足以满足我的用例(轻松快速的本地开发)。
答案 2 :(得分:2)
以下是一些说明,以使其正常工作。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
systemctl enable docker ; systemctl start docker; systemctl status docker
请参阅Install using the convenience script
mkdir -p /etc/redis/
chown -R 1000:1000 /etc/redis
sudo docker run -d --name redis -p 6379:6379 --restart unless-stopped -v /etc/redis/:/data redis redis-server /data
注意:解决方案的关键是将端口暴露(-p 6379:6379)到Docker主机并路由到容器端口。 请参阅Redis Docker Documentation
答案 3 :(得分:1)
现在使用版本4.0.9
(Docker Toolbox on Win10
)可能会更容易。只需连接redis客户端,然后:
set bind 0.0.0.0
save
停止/启动后,新设置会停止。
答案 4 :(得分:0)
使用以下命令创建Redis容器
sudo docker run -d --name redis-test -p 6379:6379 -v /redis/redis.conf:/redis.conf redis redis-server /redis.conf --appendonly yes --requirepass "redis"
您可以使用Redis-CLI
在同一台计算机上访问Redis,如果您正在使用其他计算机,请使用host machine IP
。如果要在同一主机中访问Redis容器,则另一个Docker容器将使用机器的private IP
。
答案 5 :(得分:0)
如果您想在 docker 容器中运行 Redis 集群。
答案在 Redis 自述文件 redis.conf
中,这里是从文件中提取的关于如何像专业人士一样解决问题的摘录。
全部归功于 redis.conf 文件,redis 版本 6 及更高版本。
########################## CLUSTER DOCKER/NAT support ########################
# In certain deployments, Redis Cluster nodes address discovery fails, because
# addresses are NAT-ted or because ports are forwarded (the typical case is
# Docker and other containers).
#
# In order to make Redis Cluster working in such environments, a static
# configuration where each node knows its public address is needed. The
# following two options are used for this scope, and are:
#
# * cluster-announce-ip
# * cluster-announce-port
# * cluster-announce-bus-port
#
# Each instructs the node about its address, client port, and cluster message
# bus port. The information is then published in the header of the bus packets
# so that other nodes will be able to correctly map the address of the node
# publishing the information.
#
# If the above options are not used, the normal Redis Cluster auto-detection
# will be used instead.
#
# Note that when remapped, the bus port may not be at the fixed offset of
# clients port + 10000, so you can specify any port and bus-port depending
# on how they get remapped. If the bus-port is not set, a fixed offset of
# 10000 will be used as usual.
#
# Example:
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380