Redis docker,无法连接到 redis-cli

Redis docker, cannot connect to redis-cli

我正在尝试 运行 具有持久性存储的 redis。我按照redis的官方docker page安装。

我使用 -

拉取了图像
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: Error response from daemon: network some-network not found.

我正在按照文档进行说明,为什么这不起作用?

首先创建网络

docker network create some-network

然后在所有必须使用网络的容器中使用它。

docker run --network some-network

完成删除网络后。

docker network rm some-network

首先,你这个命令运行作为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

两个答案都提供了有趣的信息,但缺少主要内容。
在 docker 中,容器可能会连接到某些网络。
默认情况下,如果您在 运行 容器时未指定任何网络,它将使用默认的桥接网络:在该网络内,任何容器都可以与任何其他容器通信,但只能通过它们的 IP 地址进行通信。

1) 使用默认桥接网络

您不能通过容器名称在该网络的容器之间进行通信。
所以这里 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...

这确实不是 net/reusable/portable 使两个容器相互通信的方法。那更适合做实验的东西。

2) 使用自定义桥接网络

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

创建您的网络:

docker network create redis-network

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

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

运行 redis 客户端并将其连接到该网络:

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

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