无法访问 Redis 容器上预期的公开端口,即使在绑定端口后也是如此

  • 本文关键字:绑定 Redis 访问 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集装箱(

我尝试过的命令变体:

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/环回(上运行您的应用程序。官方的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

相关内容

  • 没有找到相关文章

最新更新