gpt4 book ai didi

node.js - Docker-compose 部署 redis 但 app.js 拒绝连接

转载 作者:可可西里 更新时间:2023-11-01 11:14:28 25 4
gpt4 key购买 nike

我正在尝试将 nodejs 应用程序容器化。该应用程序在我手动安装并运行 redis 的 Node 容器上运行良好,但是当我尝试使用我的 docker-compose 文件在容器中运行该应用程序时,出现错误:

“错误错误:Redis 连接到本地主机:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379”。

我将在下面发布我的 docker-compose.yml 和 dockerfile 以及当我尝试执行 docker-compose up 时的控制台日志。

FROM node:8-jessie

WORKDIR /var/api-console

COPY package*.json ./
RUN npm install

COPY . . /var/api-console/

RUN apt-get update
RUN apt-get install python

EXPOSE 3000
version: '3'
services:
redis:
image: redis
ports:
- "6379:6379"
command:
redis-server
networks:
- webnet
app:
build: ./
volumes:
- ./:/var/api-console
ports:
- 3000:3000
command:
node app.js
networks:
- webnet
networks:
webnet:
AIDEVERSUSCATCH:api-console evan.dhillon$ docker-compose up
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Starting api-console_app_1 ... done
Starting api-console_redis_1 ... done
Attaching to api-console_app_1, api-console_redis_1
redis_1 | 1:C 04 Jun 2019 03:12:27.660 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 04 Jun 2019 03:12:27.660 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 04 Jun 2019 03:12:27.660 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 04 Jun 2019 03:12:27.661 * Running mode=standalone, port=6379.
redis_1 | 1:M 04 Jun 2019 03:12:27.661 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1 | 1:M 04 Jun 2019 03:12:27.661 # Server initialized
redis_1 | 1:M 04 Jun 2019 03:12:27.661 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1 | 1:M 04 Jun 2019 03:12:27.661 * DB loaded from disk: 0.000 seconds
redis_1 | 1:M 04 Jun 2019 03:12:27.661 * Ready to accept connections
app_1 | Express server listening on port 3000
app_1 | Error Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
app_1 | Error AbortError: Redis connection lost and command aborted. It might have been processed.
app_1 | events.js:183
app_1 | throw er; // Unhandled 'error' event
app_1 | ^
app_1 |
app_1 | Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
app_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)
api-console_app_1 exited with code 1

最佳答案

您日志中的这一行解释了连接失败

Redis connection to localhost:6379 failed

Node 应用程序期望 redis 位于本地主机上,但事实并非如此。

您可以通过环境变量将redis容器的地址提供给您的 Node 应用。

同时在应用服务中添加一个depends_on,让它等待redis服务。修改后的 compose 文件如下

version: '3'
services:
redis:
image: redis
ports:
- "6379:6379"
command:
redis-server
networks:
- webnet
app:
build: ./
volumes:
- ./:/var/api-console
ports:
- 3000:3000
depends_on:
- redis
environment:
redis_server_addr: redis
#The dependent service address is set in environment variable which you can use in your app to connect
command:
node app.js
networks:
- webnet
networks:

关于node.js - Docker-compose 部署 redis 但 app.js 拒绝连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com