Redis Docker连接被拒绝

rlcwz9us  于 2023-06-21  发布在  Redis
关注(0)|答案(6)|浏览(176)

我刚刚构建了Redis Docker示例

$ docker pull redis

然后我就这样跑了。

$ docker run --name=redis --detach=true --publish=6379:6379 redis

我得到以下结果

$ docker ps 
key        redis   "/sbin/entrypoint.sh"    22 minutes ago      Up 22 minutes       0.0.0.0:6379->6379/tcp   redis

对我来说,上面的意思是它现在正在本地主机或www.example.com或0.0.0.0上的端口6379上运行侦听127.0.0.1。
但令我非常惊讶的是,当我试图连接时,它的回应是连接被拒绝。
有人能给我点光吗。

zaqlnxep

zaqlnxep1#

您需要提供有关环境的更多信息(操作系统,Docker安装等),但基本上,如果您像这样启动Redis容器:

docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest

无论如何都应该暴露端口。你可能无法连接到它的唯一原因是,如果你搞砸了你的桥接口,如果你在Linux上,或者你正在使用一个有自己的网络接口和IP地址的docker机器,而你没有连接到那个IP地址。如果你使用的是Docker for Mac,那么它只支持路由到localhost地址,因为Mac主机上的桥接还不起作用。
无论如何,在MacOS上使用Docker for Mac(而不是旧的Docker Toolbox),以下内容应该足以让您开始:

➜  ~ docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest
6bfc6250cc505f82b56a405c44791f193ec5b53469f1625b289ef8a5d7d3b61e
➜  ~ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
6bfc6250cc50        redis:latest        "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:6379->6379/tcp   redis-devel
➜  ~ redis-cli ping
PONG
➜  ~
2nbm6dog

2nbm6dog2#

找到redis的已发现端口并使用该端口进行连接

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-server
j8yoct9x

j8yoct9x3#

如果你使用Redis 6.2 configuration example作为起点(就像我遇到这个问题时一样),bind 127.0.0.1指令和protected-mode yes的组合不允许Docker容器之间的通信。出于我的目的,我注解掉了bind指令,并将protected-mode指令设置为no--但请注意提供的关于不要将Redis暴露给开放互联网的警告。

wxclj1h5

wxclj1h54#

推荐使用docker-compose https://docs.docker.com/compose/
在您的docker-compose.yml中

redis:                                                                          
  image: redis
ports:
  - "6379:6379"

在此之后,您可以运行:

$ docker-compose run redis /bin/bash
$ redis-server
$ redis-cli ping

应返回:PONG

wvt8vs2t

wvt8vs2t5#

这看起来像是由redis客户端引起的网络问题,因为你的redis服务器看起来很好。
注意redis docker页面有点混乱。它说要通过redis-cli连接到你的redis,你应该输入:
docker run -it --network some-network --rm redis redis-cli -h some-redis
然而,这会创建另一个docker容器,基本上就是redis客户端。它无法连接到您的redis服务器,因为它们没有连接到同一个网络。
你可以做一些不同的事情,如下所示:

docker network create some-network
docker run --name redis-server --network some-network -d redis
docker run -it --network some-network --rm redis redis-cli -h redis-server

另一个选择是像你一样Map端口6379,但是它需要你使用一个redis客户端,这个客户端应该下载到你自己的电脑上。

kkbh8khc

kkbh8khc6#

你可以生成一个将network_mode设置为host的Redis容器。这将允许您从本地主机连接到Redis服务器。

docker-compose.yml

version: '3.7'

services:
  redis:
    image: 'redis:latest'
    network_mode: host
    ports:
      - '6379:6379'
    tty: true
docker compose up -d

或者你可以exec到你的容器中,然后从你的容器连接到Redis服务器,如下所示:

docker run --name some-redis -d redis
docker exec -it some-redis /bin/bash
redis-cli

相关问题