我刚刚构建了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。
但令我非常惊讶的是,当我试图连接时,它的回应是连接被拒绝。
有人能给我点光吗。
6条答案
按热度按时间zaqlnxep1#
您需要提供有关环境的更多信息(操作系统,Docker安装等),但基本上,如果您像这样启动Redis容器:
无论如何都应该暴露端口。你可能无法连接到它的唯一原因是,如果你搞砸了你的桥接口,如果你在Linux上,或者你正在使用一个有自己的网络接口和IP地址的docker机器,而你没有连接到那个IP地址。如果你使用的是Docker for Mac,那么它只支持路由到localhost地址,因为Mac主机上的桥接还不起作用。
无论如何,在MacOS上使用Docker for Mac(而不是旧的Docker Toolbox),以下内容应该足以让您开始:
2nbm6dog2#
找到redis的已发现端口并使用该端口进行连接
j8yoct9x3#
如果你使用Redis 6.2 configuration example作为起点(就像我遇到这个问题时一样),
bind 127.0.0.1
指令和protected-mode yes
的组合不允许Docker容器之间的通信。出于我的目的,我注解掉了bind
指令,并将protected-mode
指令设置为no
--但请注意提供的关于不要将Redis暴露给开放互联网的警告。wxclj1h54#
推荐使用docker-compose https://docs.docker.com/compose/
在您的docker-compose.yml中
在此之后,您可以运行:
应返回:PONG
wvt8vs2t5#
这看起来像是由redis客户端引起的网络问题,因为你的redis服务器看起来很好。
注意redis docker页面有点混乱。它说要通过redis-cli连接到你的redis,你应该输入:
docker run -it --network some-network --rm redis redis-cli -h some-redis
然而,这会创建另一个docker容器,基本上就是redis客户端。它无法连接到您的redis服务器,因为它们没有连接到同一个网络。
你可以做一些不同的事情,如下所示:
另一个选择是像你一样Map端口6379,但是它需要你使用一个redis客户端,这个客户端应该下载到你自己的电脑上。
kkbh8khc6#
你可以生成一个将network_mode设置为
host
的Redis容器。这将允许您从本地主机连接到Redis服务器。docker-compose.yml
或者你可以exec到你的容器中,然后从你的容器连接到Redis服务器,如下所示: