即使绑定了端口,Redis容器上的预期暴露端口也无法访问

时间:2018-08-02 08:46:43

标签: docker redis

运行Redis容器时遇到了一个非常糟糕的问题。由于某些原因,即使我尝试绑定端口和您拥有的端口,它也不会公开它声称要公开的Redis端口(6379)。显然,我已经通过扫描分配给Redis容器(172.17.0.3)的IP上的开放端口进行了检查,并且它没有返回任何开放端口。我该如何解决这个问题?

Docker Redis页面(以供我提取图像的参考):https://hub.docker.com/_/redis/

我尝试过的命令版本:

docker run --name ausbot-ranksync-redis -p 127.0.0.1:6379:6379 -d redis
docker run --name ausbot-ranksync-redis -p 6379:6379 -d redis
docker run --name ausbot-ranksync-redis -d redis
docker run --name ausbot-ranksync-redis --expose=6379 -d redis

https://gyazo.com/991eb379f66eaa434ad44c5d92721b55(我扫描的最后一个容器是MariaDB容器)

1 个答案:

答案 0 :(得分:0)

  

我尝试过的命令版本:

docker run --name ausbot-ranksync-redis -p 127.0.0.1:6379:6379 -d redis
docker run --name ausbot-ranksync-redis -p 6379:6379 -d redis

这两个应该可以使主机上的端口可用。

  

很显然,我已经通过扫描分配给Redis容器(172.17.0.3)的IP上的开放端口进行了检查,并且它没有返回任何开放端口。我该如何解决这个问题?

您不应从docker外部直接检查容器上的端口。如果要从主机或外部访问容器,请先发布端口(如上所述),然后访问主机IP上的端口(或第一个示例中的主机127.0.0.1)。


对于docker联网,您需要在所有接口(而不是localhost / loopback)上运行您的应用程序。官方的redis镜像已经做到了,您可以通过以下方式进行验证:

docker run --rm --net container:ausbot-ranksync-redis nicolaka/netshoot netstat -lnt

docker run --rm --net container:ausbot-ranksync-redis nicolaka/netshoot ss -lnt

要从Docker外部访问容器,您需要发布端口(在docker-compose.yml中为docker run -p ...ports)。然后,您连接到主机IP和发布的端口。

要从docker内部访问容器,请创建一个共享网络,在其中运行容器,然后使用docker的DNS和容器端口进行访问(此操作不需要发布和公开):

docker network create app
docker run --name ausbot-ranksync-redis --net app -d redis
docker run --name redis-cli --rm --net app redis redis-cli -h ausbot-ranksync-redis ping