我正在运行 Ubuntu 并尝试为 Node 应用设置开发环境,这是我的 docker-compose.yml
:
version: "2"
services:
redis:
image: redis
ports:
- "6381:6379"
volumes:
- /var/lib/thinklog-queue:/data
activity-service:
build:
context: ./activity-service
command: yarn dev
ports:
- "3001:3001"
environment:
REDIS_QUEUE_URL: "redis://redis:6381"
depends_on:
- redis
Node 应用程序的 Dockerfile 如下所示:
FROM node:9
WORKDIR /app
COPY package.json ./
COPY yarn.lock ./
RUN yarn install
COPY . .
EXPOSE 4000
CMD ["yarn", "start"]
我从 env 变量扩展 Redis 连接字符串。
当我在日志中运行 docker-compose build && docker-compose up
时,我从 Node 应用程序得到了这个输出:
activity-service_1 | Error: Redis connection to redis:6381 failed - connect ECONNREFUSED 172.20.0.2:6381
看起来设置是正确的,但是有一些东西阻止了与 Redis 的实习生连接。 (在这个 docker compose 网络中)
从外部连接到这个 Redis 实例,例如其他 shell session 工作正常:
kuno@dell:~/code/THINKLOG/activity-service$ redis-cli -p 6381
127.0.0.1:6381> ping
PONG
我还尝试像这样安装自定义配置(在 docker-compose.yml
中为 Redis 的卷数组添加了新项目):
- ./redis.conf:/usr/local/etc/redis/redis.conf
已将绑定(bind)行注释掉并将其修改为这样(最后一个地址是 docker-compose 内部使用的地址):
bind 192.168.1.100 10.0.0.1 172.20.0.2
我是否还应该挂载自定义 Redis 配置并将 Redis 配置为允许在 docker 网络内进行连接?
最佳答案
在 url REDIS_QUEUE_URL: "redis://redis:6379"
中将端口更改为 6379 6381 是主机 IP 上的端口而不是 redis 容器端口。
关于node.js - 使用 docker-compose 时, Node 应用程序无法连接到 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50958399/