Redis docker-使用Node.js编写-连接ENOENT

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

我正在尝试使用docker-compose容器化我的整个开发人员工作流程。我面临的问题是redis容器。我的工作容器无法连接到Redis。我尝试了与stackoverflow不同的解决方案,例如:

Setting up node with redis using docker-compose

Access redis locally on docker - docker compose

nodejs, redis, npm and docker-compose setup

Docker-compose , anyway to specify a redis.conf file?

How to connect to a Redis container using Docker Compose?

还有许多其他来自github的人,尝试了不同的例子,但没有运气。

这是我的docker-compose文件:

version: "3.6"

services:
  redis_db:
    # image: bitnami/redis:latest # tried different image also
    image: redis
    container_name: rme_redis
    network_mode: host # tried networks also
    # command: ['redis-server', '/redis.conf']
    # volumes:
    #   - ./docker/redis.conf:/redis.conf
    # hostname: redis_db
    # networks: 
    #   - rme
    # environment:
    #   - ALLOW_EMPTY_PASSWORD=yes
      # - REDIS_PASSWORD="redis"
    ports:
      - 6379:6379
    # networks:
    #   node_net:
    #     ipv4_address: 172.28.1.4

  worker:
    build: worker
    image: worker
    container_name: rme_worker
    command: node worker.js
    # networks:
    #   - rme
    # network_mode: host
    environment: 
      - REDIS_URL="redis://redis_db:6379" # localhost when netowk_mode is host
    volumes:
      - ./worker:/app
    # links:
    #   - redis_db
    depends_on:
      - redis_db

我得到的错误是:

Error: Redis connection to "redis://redis_db:6379" failed - connect ENOENT "redis://redis_db:6379"
     at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
   errno: -2,
   code: 'ENOENT',
   syscall: 'connect',
   address: '"redis://redis_db:6379"'
 }

操作系统:macOS

Docker:Docker桌面

感谢您的帮助

node.js docker redis docker-compose
1个回答
1
投票

设置network_mode: host会禁用特定容器的Docker网络。仅在某些不常见的情况下,容器不侦听固定端口号,或者您试图使用容器来管理主机的网络设置,才需要这样做。

在您的情况下,由于Redis数据库正在禁用Docker网络,因此应用程序容器无法按名称访问它。删除所有network_mode: host选项应解决此问题。

Networking in Compose描述了整个网络设置。值得注意的是,Compose将为您创建一个default网络,并且可以使用其Compose服务名称访问容器。您通常不需要指定自定义networks:选项,显式提供container_name:,设置hostname:,提供过时的links:或设置network_mode:

您应该能够成功将显示的docker-compose.yml文件修剪为:

version: "3.6"
services:
  redis_db:
    image: redis
    # only needed to directly access Redis from host
    ports:
      - 6379:6379
  worker:
    build: worker
    environment: 
      - REDIS_URL="redis://redis_db:6379"
    # `docker-compose up worker` also starts Redis
    # Not strictly needed for networking
    depends_on:
      - redis_db
© www.soinside.com 2019 - 2024. All rights reserved.