我正在查看documentation here,并看到以下行:
$ docker run -it --network some-network --rm redis redis-cli -h some-redis
--network some-network
字段中应该包含什么?我的docker run命令在字段docker run -d -p 6379:6379
等的默认端口映射之前完成过。
我正在使用默认的docker网络配置启动我的Redis服务器,并且看到它正在使用中:
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abcfa8a32de9 redis "docker-entrypoint.s…" 19 minutes ago Up 19 minutes 0.0.0.0:6379->6379/tcp some-redis
但是,使用默认的桥接网络会产生:
$ docker run -it --network bridge --rm redis redis-cli -h some-redis
Could not connect to Redis at some-redis:6379: Name or service not known
答案 0 :(得分:0)
Docker通过使用网络驱动程序提供了对网络容器的支持。默认情况下,Docker为您提供两个网络驱动程序,即网桥驱动程序和覆盖驱动程序。您还可以编写网络驱动程序插件,以便可以创建自己的驱动程序,但这是一项高级任务。
在此处了解更多信息。 https://docs.docker.com/engine/tutorials/networkingcontainers/
答案 1 :(得分:0)
您需要运行
docker network create some-network
some-network
的名称无关紧要,只要Redis服务器,您的特殊CLI容器以及与该服务器通信的所有客户端都使用相同的名称即可。 (如果您使用的是Docker Compose,这将自动为您发生,网络将被命名为directoryname_default
之类的名称;请使用docker network ls
来查找它。)
如果您的Redis服务器已经在运行,则可以使用docker network connect将现有容器附加到新网络。这是创建容器后可以更改的少数设置之一。
如果您只是想运行一个客户端来与该Redis对话,那么您根本不需要Docker。您可以在本地安装Redis客户端工具并运行redis-cli
,指向主机的IP地址和docker run -p
选项中的第一个端口。 Redis有线协议非常简单,您还可以使用诸如nc
或telnet
之类的原始工具。
答案 2 :(得分:-1)
忽略--network bridge
命令并使用:
docker exec -it some-redis redis-cli