Redis docker,无法连接到redis-cli。

4

我正在尝试运行具有持久性存储的Redis。我按照Redis官方Docker页面进行安装。

我使用以下命令拉取了该镜像-

docker pull redis

我用持久化存储选项启动了Redis -
docker run --name some-redis -d redis redis-server --appendonly yes

我正在尝试使用redis cli连接到redis实例,命令为 -

docker run -it --network some-network --rm redis redis-cli -h some-redis

我遇到了以下错误 -

docker: 守护进程的错误响应:未找到网络some-network。

我按照文档要求操作,为什么还是无法正常工作?


你必须先创建“some-network”,然后将其应用于两个容器。 或者在redis服务器容器上公开redis端口,并使用本地IP和公开的端口进行连接。 - Rene M.
1
你是否使用 docker network create 命令创建了一个新的网络?请参考 https://docs.docker.com/engine/reference/run/#network-settings - Arkadiusz Drabczyk
3个回答

4
两个答案都提供了有趣的信息,但是缺少主要内容。
在Docker中,容器可以连接到某些网络。默认情况下,如果在运行容器时没有指定任何网络,它将使用默认桥接网络:在该网络中,任何容器都可以通过其IP地址相互通信,但仅限于那些IP地址。
使用默认桥接网络:
您无法通过容器名称在该网络中的容器之间进行通信。
因此,在这里,docker run -it --network some-network --rm redis redis-cli -h some-redissome-redis部分不是可解析的主机名。
为了克服这一点,您必须通过其IP地址引用容器。检查容器以了解详细信息:
docker container inspect some-redis | grep -i ipaddress

您应该会得到类似这样的东西:"IPAddress": "172.17...." 现在将IP地址指定为-h参数,就可以了。
docker run -it --network some-network --rm redis redis-cli -h 172.17...

那种方式并不是一种可重用、可移植的容器间通信方式,更适合用来实验性质的事情。

  1. 使用自定义桥接网络

你可以通过容器名称在该网络中的容器之间进行通信。

创建你的网络:

docker network create redis-network

运行Redis服务器并将其连接到该网络:

docker run --name some-redis -d --network redis-network redis redis-server --appendonly yes

运行Redis客户端并将其连接到该网络:
docker run -it --rm --network redis-network redis redis-cli -h some-redis

现在客户端可以通过 -h some-redis 连接到服务器实例了。

嗨,@davidxxx,看起来在 默认桥接网络 中似乎不需要 --network,是吗? - eyal

1
首先,你需要将这个命令作为 redis-server 运行。
docker run --name some-redis -d redis redis-server --appendonly yes

下一步,您需要运行redis-cli以连接redis-server,应该附加redis-server容器并运行redis-cli。
docker exec -it some-redis redis-cli -h

当然,如果您想像访问redis页面一样通过网络访问,您需要将cli容器的网络连接到redis-server容器以共享网络。
docker run --rm -it --net=container:some-redis  redis redis-cli -h

1
首先创建网络。
docker network create some-network

然后在所有需要使用网络的容器中使用它。

docker run --network some-network

当您完成后,请移除网络。
docker network rm some-network

你和wusheng的答案都是正确的。我尝试使用你的答案创建了一个网络,它有效了。同时,根据wusheng的答案,我也创建了一个无网络的版本。由于他的答案提供了两种方法,我决定接受他的答案作为正确答案。 - Bopsi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接