无法从 Spring Boot 连接到外部/内部机器中的 Dockerized Redis

问题描述 投票:0回答:2

我正在从 Redis 服务器 Docker 容器未运行的外部计算机上的 Spring Boot 应用程序连接到 Redis。当应用尝试连接Redis时,应用无法正常连接,直到发送的请求超时。同时,如果我尝试从以下位置连接:

  1. 在运行 Redis 服务器 docker 容器且主机为 localhost 的机器内,我可以连接它。而且,我不知道为什么我无法通过将主机值设置为数字 IP/字母 (URL) 进行连接,仅适用于“localhost”。
  2. Redis 服务器 Docker 容器未使用 Redis 客户端应用程序 GUI 进行管理的外部计算机,我可以连接它。

应用程序属性:

spring.redis.host=pc-1
spring.redis.port=6379

pc-1
是某些数字 ip 的别名。我正在使用主机功能 窗口对其进行别名/重定向。

.env:

REDIS_PORT=6379

docker-compose.yml:

  redis:
    image: redis:latest
    ports:
      - "${REDIS_PORT}:6379"
    command:
      # - redis-server
      # - --requirepass "${REDIS_PASSWORD}"
    networks:
      - redis
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping"]
      interval: 10s
      timeout: 10s
      retries: 3

我需要有关此问题的帮助。

更新: 我忽略这个问题,因为它目前与我的工作无关。我怀疑这是因为 WSL 错误或功能有限。具体来说,数字IP和字母地址可能使用我一直使用的路由器的连接路由。此外,我的机器不仅通过一个适配器连接。因此,连接的成功可能是随机的。最初询问此问题时,WSL 不支持与路由器的连接。为了支持它,我们需要启用最近实验性的镜像网络功能。

spring-boot docker redis containers
2个回答
1
投票

在 docker compose 命令中使用

--service-ports
标志来发布您在 docker compose 文件中定义的端口。

其他调试技巧:

  • ${REDIS_PORT}
    变量进行硬编码,以防未设置值或设置默认值,如
    ${REDIS_PORT:-default}
  • docker compose --env-file ./somedir/.env up
    那样显式传递 env 文件,以防 env 文件未被拾取
  • 使用 dockerspect 获取容器状态,检查网络信息

0
投票

我怀疑这是因为 WSL 错误或功能有限。具体来说,数字IP和字母地址可能使用我一直使用的路由器的连接路由。此外,我的机器不仅通过一个适配器连接。因此,连接的成功可能是随机的。最初询问此问题时,WSL 不支持与路由器的连接。为了支持它,我们需要启用最近实验性的镜像网络功能。

链接:

© www.soinside.com 2019 - 2024. All rights reserved.