Redis Docker连接被拒绝

Ike*_*ala 12 redis docker boot2docker dockerfile docker-compose

我刚刚构建了redis docker实例

$ docker pull redis
Run Code Online (Sandbox Code Playgroud)

之后,我就这样运行了。

$ docker run --name=redis --detach=true --publish=6379:6379 redis
Run Code Online (Sandbox Code Playgroud)

我得到以下

$ docker ps 
key        redis   "/sbin/entrypoint.sh"    22 minutes ago      Up 22 minutes       0.0.0.0:6379->6379/tcp   redis
Run Code Online (Sandbox Code Playgroud)

对我来说,上面的意思是它现在正在本地主机或127.0.0.1或0.0.0.0的6379端口上运行。

但是令我惊讶的是,当我尝试连接时,连接被拒绝。

请有人可以给我一些光。

Pau*_*ole 9

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

docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest
Run Code Online (Sandbox Code Playgroud)

无论如何,它都应该暴露端口。您可能无法连接到它的唯一原因是,如果您弄乱了网桥接口,如果您使用的是Linux,或者您正在使用具有自己的网络接口和IP地址的docker计算机,并且重新连接到该IP地址。如果您使用的是Mac的Docker,则该功能仅支持路由到localhost地址,因为在Mac主机上的桥接尚不可用。

无论如何,在具有适用于Mac的Docker的MacOS(而不是旧的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
?  ~ 
Run Code Online (Sandbox Code Playgroud)


小智 7

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

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-server
Run Code Online (Sandbox Code Playgroud)


thi*_*vsk 5

我建议你使用 docker-compose https://docs.docker.com/compose/

在你 docker-compose.yml

redis:                                                                          
  image: redis
ports:
  - "6379:6379" 
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以运行:

$ docker-compose run redis /bin/bash
$ redis-server
$ redis-cli ping
Run Code Online (Sandbox Code Playgroud)

应该返回:PONG


Ida*_*n P 5

它看起来像是由 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
Run Code Online (Sandbox Code Playgroud)

另一种选择是像您一样映射端口 6379,但是它需要您使用 redis 客户端,该客户端应下载到您自己的计算机上。


Mar*_*orn 5

如果您使用Redis 配置示例作为起点(就像我遇到此问题时的情况一样),则该bind 127.0.0.1指令的组合protected-mode yes不允许 Docker 容器之间进行通信。出于我的目的,我注释掉了该bind指令并将该指令设置protected-mode为no-- 但请注意所提供的关于不要将 Redis 暴露给开放互联网的警告。