docker - docker上的Redis由于多个错误而无法运行

标签 docker redis docker-compose

我一直在尝试将 redis 容器连接到我的节点应用程序容器,但出现以下错误。请在报告问题之前解决。

docker-compose

version: "3"

services:
  vote:
    build: ./voting/.
    ports:
      - "3000:3000"
    networks:
      - front-tier
      - back-tier

  result:
    build: ./result/.
    ports:
      - "3011:3011"
    networks:
      - front-tier
      - back-tier

  worker:
    build:
      context: ./service_worker/.
    depends_on:
      - "redis"
      - "db"
    networks:
      - back-tier

  redis:
    image: redis:alpine
    container_name: redis
    ports: ["6379"]
    networks:
      - back-tier

  db:
    image: mongo:latest
    container_name: db
    networks:
      - back-tier

volumes:
  db-data:

networks:
  front-tier:
  back-tier:

docker-compose up

vote_1    | the app is running
vote_1    | events.js:292
vote_1    |       throw er; // Unhandled 'error' event
vote_1    |       ^
vote_1    | 
vote_1    | Error: Redis connection to 0.0.0.0:6379 failed - connect ECONNREFUSED 0.0.0.0:6379
vote_1    |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
vote_1    | Emitted 'error' event on RedisClient instance at:
vote_1    |     at RedisClient.on_error (/usr/src/app/node_modules/redis/index.js:341:14)
vote_1    |     at Socket.<anonymous> (/usr/src/app/node_modules/redis/index.js:222:14)
vote_1    |     at Socket.emit (events.js:315:20)
vote_1    |     at emitErrorNT (internal/streams/destroy.js:92:8)
vote_1    |     at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
vote_1    |     at processTicksAndRejections (internal/process/task_queues.js:84:21) {
vote_1    |   errno: 'ECONNREFUSED',
vote_1    |   code: 'ECONNREFUSED',
vote_1    |   syscall: 'connect',
vote_1    |   address: '0.0.0.0',
vote_1    |   port: 6379
vote_1    | }

docker日志redis

1:C 17 Oct 2020 07:36:16.705 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 17 Oct 2020 07:36:16.706 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 17 Oct 2020 07:36:16.706 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 17 Oct 2020 07:36:16.708 * Running mode=standalone, port=6379.
1:M 17 Oct 2020 07:36:16.708 # Server initialized
1:M 17 Oct 2020 07:36:16.708 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 17 Oct 2020 07:36:16.709 * Ready to accept connections

当我尝试docker exec -ti redis redis-server

13:C 17 Oct 2020 07:42:16.608 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
13:C 17 Oct 2020 07:42:16.608 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=13, just started
13:C 17 Oct 2020 07:42:16.608 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
13:M 17 Oct 2020 07:42:16.608 # Could not create server TCP listening socket *:6379: bind: Address in use

现在我认为这里有几个地方,我已经看到了redis-config文件的这个错误,但是如何在docker镜像中解决它,这没有很好的解释。连接没有问题,但是问题出在redis的conf上。我可以使用 dns/ip 从其他容器 ping 到该容器。我认为如果无法听到错误的最后部分 *:6379,如果编辑了这个和 conf 文件,应用程序将正常工作。

最佳答案

您正在从另一个具有 0.0.0.0:6379 地址的容器连接到 redis 容器。如果您要将 redis 容器端口暴露给主机,请使用 docker 服务名称 redis:6379 或主机的 IP。

关于docker - docker上的Redis由于多个错误而无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64400812/

相关文章:

docker —— "flower": executable file not found in $PATH: unknown

go - 合并来自两个 post 请求的数据

redis - 我如何在 aws 弹性缓存 redis 中异步复制 redis 数据(主从配置)。

docker - 如何使用 Docker 将变量作为属性传递给 Wildfly 中的 xml 配置文件

python - key 错误 : 'PATH' when running docker-compose up from Fabric

mongodb - docker-compose mongodb新鲜实例不起作用

docker - Docker 容器中的 DNS 服务器

mysql - Docker为 flask 应用程序撰写数据库url环境变量

docker - 在构建阶段将环境变量从 docker-compose 传递到容器

redis - redis中的容器数据类型是什么?