Docker 无法从其他服务连接到 redis

2024-07-04

我不知道如何连接到我的redis我的服务app服务。使用 Docker 版本 18.03.1-ce,为 Mac 构建 9ee9f40ocker。

我尝试将我在类似问题上发现的各种方法联系起来:

const client = redis.createClient({ host: 'localhost', port: 6379});

const client = redis.createClient({ host: 'redis', port: 6379});

const client = redis.createClient('redis://redis:6379');

const client = redis.createClient('redis', 6379); // and reversed args

我总是得到某种形式的:

错误:Redis 连接到 localhost:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379

错误:Redis 连接到 redis:6379 失败 - 连接 ECONNREFUSED 172.20.0.2:6379

Docker 容器

$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED              STATUS              PORTS                    NAMES
0fd798d58561        app_app         "pm2-runtime start e…"   2 seconds ago        Up 7 seconds                                 app
65d148e498f7        app_redis       "docker-entrypoint.s…"   About a minute ago   Up 8 seconds        0.0.0.0:6379->6379/tcp   redis

Redis 的工作原理:

$ docker exec -it redis /bin/bash
root@65d148e498f7:/data# redis-cli ping
PONG

Redis Dockerfile(很简单)

FROM redis:4.0.9
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]

应用程序 Dockerfile

FROM node:10.3.0-slim
RUN mkdir -p /app
COPY src/* /app/
CMD ["pm2-runtime", "start", "/app/ecosystem.config.js"]

docker-compose.yml

version: "3"
services:
  redis:
    build: ./redis/
    container_name: redis
    restart: unless-stopped
    ports:
      - "6379:6379"
    expose:
      - "6379"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - 'API_PORT=6379'
      - 'NODE_ENV=production'
  app:
    depends_on:
      - redis
    build: ./app/
    container_name: app
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /app/node_modules
    environment:
      - 'NODE_ENV=production'

让我用简单的语言解释一下。当你跑步时docker-compose up它在单独的容器中运行 redis 和应用程序。现在您的应用程序需要连接/访问 redis 容器(请记住,redis 不在您的计算机本地主机上,它位于容器内并在默认端口上运行6379)。默认情况下,Docker 会将应用程序容器和 redis 容器保留在同一网络中,并且您可以通过容器的服务名称来访问容器(在您的情况下是 redis 和应用程序)因此,为了从应用程序容器访问 redis,您需要的就是使用默认端口6379主机将是服务名称(在您的例子中为“redis”)。

对于在容器中运行的节点应用程序,可以通过以下方式访问 Redis(也在容器中运行)

const redis = require("redis");
const client = redis.createClient(6379, "service-name-for-redis-container");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 无法从其他服务连接到 redis 的相关文章

随机推荐

  • 如何从张量流中的两个张量创建字典?

    我有两个张量 一个用于键 一个用于值 我正在尝试从它们创建一个字典 以便我可以使用创建的字典来更新另一个字典update 功能 我怎样才能实现这个 我不是在寻找tf contrib lookup HashTable 我尝试过使用tf map
  • 如何加快 AWS Fargate 上的部署速度?

    从 EC2 集群实例迁移到 AWS Fargate 后 我意识到部署需要更长的时间 以前需要 1 2 分钟 现在某些部署最多需要 5 分钟 这个帖子 https datree io blog migrating to aws ecs far
  • 以编程方式另存为 PowerPoint 2003 中的 PowerPoint 2007 (pptx)

    我需要能够将 PowerPoint 2003 中的演示文稿 以编程方式 保存为 OpenXML pptx 我安装了 Microsoft Office 兼容包 这确实允许我从 PowerPoint 2003 执行 另存为 PowerPoint
  • ModuleNotFoundError:没有名为“binance.client”的模块; “binance”不是一个包

    嘿 我是 Stack Over Flow 和 Python 的新手 但想学习并希望有人可以帮助我 我正在尝试在 python 中开发一个币安交易机器人 请参阅下面我的脚本 from binance client import Client
  • VS Code,更改调试器的 NodeJS 版本

    我想将 VS Code 的 NodeJS 版本从 4 5 0 更改为 7 7 2 专门针对不同的项目 我在Mac上使用nvm 并且我有上面提到的两个版本 它们用于不同的项目 尽管我可以使用 nvm 从终端进行更改 但 VS Code 使用默
  • 如何扩展 C# 内置类型,例如 String?

    我需要Trim a String 但我想删除字符串本身内所有重复的空格 而不仅仅是在其末尾或开头 我可以用这样的方法来做到这一点 public static string ConvertWhitespacesToSingleSpaces s
  • C#:秒到分钟到小时的转换?

    好吧 首先 我很确定我不会在这项作业中使用 TimeSpan 相反 当用户在文本框中输入秒数时 它会在消息框中显示秒 分钟和小时的公式系列 这就是我被困住的地方 我们应该用这个例子来检查我们的答案 7565 秒是 2 小时 6 分 5 秒
  • 共享库卸载的钩子函数

    我想添加钩子函数 该函数将在卸载共享库时被调用 库在编译时链接 可以做这样的事吗 也许 gcc 有标志吗 我看到了在运行时加载库的类似解决方案 但它不符合我的期望 对于 Linux 系统 dlopen dlclose 手册页解释了如何将这样
  • 如何在 Blazor Web 程序集中检查客户端连接状态

    我有一个 Blazor webasemmbly 应用程序 它使用 asp net core 作为后端 使用 Blazor wasm 作为前端 我有一个类可以检查 HTTP 问题 例如 notfound BadReqest 和 public
  • 如何在javafx中嵌入PApplet?

    所以我让我的处理代码在java中运行 但现在我想将它嵌入到我的 GUI 的 JavaFX 中 我怎样才能这样做呢 我尝试使用以下代码 但它似乎不起作用 package testprocessing import javafx applica
  • requestAnimationFrame 在较弱的机器上运行缓慢。解决办法吗?

    所以 我正在制作一个动画 不是在网站 网页上 它使用Javascript 对于动画 我使用requestAnimationFrame代替setInterval as setInterval不能很好地满足我的需要 然而 尽管requestAn
  • AirPrint UIView 的内容

    我正在尝试通过 iPad 应用程序设置打印 其中单击 打印 将打印包含其所有内容的视图 这是我尝试过的 从网上的一些示例中提取的 This is the View I want to print Just a 200x200 blue sq
  • 蓝牙管理器在 iOS 7 上不工作

    我尝试在 iOS 7 上的应用程序中使用蓝牙管理器 但它似乎不起作用 Calling setEnabled and setPowered 蓝牙管理器上没有任何效果 我正在注册通知 BluetoothAvailabilityChangedNo
  • 如何限制 ListView.builder 中的项目数量?

    我想限制itemCount of my ListView最多为 5 个 如果有更多项目 则添加文本 and more 并且仅在项目数为 5 或更少时显示项目 我尝试过使用itemCount 5但是当项目少于 5 时会返回错误 我该如何实现这
  • 正则表达式搜索避免嵌套结果

    我的文档包含几个代码块实例 如下所示 highlight some code endhighlight 在 Atom io 中 我正在尝试编写一个正则表达式搜索来捕获这些内容 我的第一次尝试是 highlight S s endhighli
  • PyTorch LSTM - 使用词嵌入代替 nn.Embedding()

    nn Embedding 对于 LSTM 的学习至关重要吗 我在 PyTorch 中使用 LSTM 来预测 NER 类似任务的示例在这里 https pytorch org tutorials beginner nlp sequence m
  • Freemarker、PDF、页眉/页脚和分页符

    Freemarker 的一个常见用途是生成 PDF 不幸的是 我必须生成一个包含很多页面的pdf 并且 他们 要求我添加包含一些信息的页眉和包含 第2 60页 等内容的页脚 在网上搜索我找到了如何创建宏模板 但它只共享一些常见标签 如css
  • 如何在javascript中使用MD5传输密码

    我弹出一个 jquery 对话框模式框用于登录我的网站 当用户单击登录时 它会向 login php 文件发出一个 post 请求 如下所示 post includes login php user username pass passwo
  • 调用 std::adjacent_difference() 时的隐式转换

    我想获得相邻之间距离的向量points在向量中 struct Point double x y z vector
  • Docker 无法从其他服务连接到 redis

    我不知道如何连接到我的redis我的服务app服务 使用 Docker 版本 18 03 1 ce 为 Mac 构建 9ee9f40ocker 我尝试将我在类似问题上发现的各种方法联系起来 const client redis create