我无法弄清楚如何从我的 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 containers
$ 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 works:
$ 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"]
app 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'
2 回答
看起来您的redis映像配置为侦听127.0.0.1而不是所有接口 . 这不是默认redis映像的问题,因此要么使用docker hub中的官方映像,要么更正配置以侦听0.0.0.0 .
您将能够使用netshoot验证这一点:
在redis conf中,通过在redis.conf中注释掉“bind”行来监听所有接口 .
localhost
来自app
容器's perspective won' t能够离开app
容器 . 所以最好的办法是使用redis
或主机的IP地址 .如果要从
app
容器中获取redis
,则需要链接它们或将它们放入同一网络中 . 请使用相同的网络名称为这两个服务添加network
属性 . 然后,Docker将为您提供有效的服务名称dns查找 .请参阅https://docs.docker.com/compose/compose-file/#networks(适用于
service:
属性)和https://docs.docker.com/compose/compose-file/#network-configuration-reference(适用于顶级networks
属性)的官方文档 .