我刚刚构建了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
对我而言,上述意味着它现在正在运行侦听localhost上的端口6379或127.0.0.1或0.0.0.0。
但令我惊讶的是,当我尝试连接时,连接被拒绝响应。
请有人可以投光。
答案 0 :(得分:6)
您需要提供有关您的环境的更多信息(操作系统,Docker安装等),但基本上,如果您像这样启动Redis容器,则:
docker run --name=redis-devel --publish=6379:6379 --hostname=redis --restart=on-failure --detach redis:latest
无论如何,它都应该暴露端口。您可能无法连接到它的唯一原因是,如果您弄乱了网桥接口,如果您使用的是Linux,或者您正在使用具有自己的网络接口和IP地址的docker计算机,并且重新连接到该IP地址。如果您使用的是Mac的Docker,则该功能仅支持路由到本地主机地址,因为在Mac主机上的桥接尚不可用。
无论如何,在具有Mac的Docker for Mac的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
➜ ~
答案 1 :(得分:2)
由于您的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
另一个选择是确实像您一样映射端口6379,但是它要求您使用Redis客户端,该客户端应下载到您自己的计算机上。
答案 2 :(得分:1)
I recomend you to use docker-compose https://docs.docker.com/compose/
in you docker-compose.yml
redis:
image: redis
ports:
- "6379:6379"
After this you can run:
$ docker-compose run redis /bin/bash
$ redis-server
$ redis-cli ping
Should return: PONG
答案 3 :(得分:1)
找到redis的已发现端口并使用它来连接
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis-server
答案 4 :(得分:0)
如果您使用Redis configuration example作为起点(就像我遇到这个问题时一样),则bind 127.0.0.1
指令和protected-mode yes
的组合不允许进行通信在Docker容器之间。出于我的目的,我注释掉了bind
指令,并将protected-mode
指令设置为no
,但是请注意所提供的警告,不要将Redis暴露在开放的Internet中。