【发布时间】:2018-11-21 21:49:12
【问题描述】:
我不知道如何从我的app 服务连接到我的redis 服务。使用 DDocker 版本 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'
【问题讨论】:
-
检查您的主机 6379 端口。有什么东西用过那个端口吗?
sudo lsof -i tcp:6379 -
@TruongDang 它没有显示输出。我最初使用不同的端口,但切换回
6379进行调试。两者都有上述相同的错误。 -
你能构建你的镜像并尝试将
build: ./redis/替换为image: your_image_name_build_from_dockerfile吗? -
好像你的
Redis还没有开始……你可能需要检查你的docker文件和redis配置…… -
请包含错误消息,它不会显示它连接到 localhost 或 127.0.0.1,因为这在容器之间不起作用。