Независимо от того, что я пытаюсь, я не могу заставить мое приложение узла подключаться к redis между контейнерами в пределах одной docker -compose конфигурации yml. Я видел много похожих вопросов, но нет ответов, похоже, работают.
Я использую официальные изображения в обоих случаях, а не строю свои
Я ставлю "redis" в качестве моего хоста и задаю его как имя хоста в моей конфигурации docker YML
const client = redis.createClient({ host: "redis" });
в моей redis.conf
Я использую bind 0.0.0.0
Это что консоль распечатывает:
Redis connection to redis:6379 failed - getaddrinfo ENOTFOUND redis redis:6379
Error: connect ECONNREFUSED 127.0.0.1:6379
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 6379
}
Это мой docker -compose.yml
version: '3'
services:
server:
image: "node:10-alpine"
working_dir: /usr/src/app
user: "node"
command: "npm start"
volumes:
- .:/usr/src/app
ports:
- '3000:3000'
- '3001:3001'
- '9229:9229' # Node debugging port
environment:
- IS_DOCKER=1
- NODE_ENV=DEVELOPMENT
depends_on:
- db
db:
image: "redis:5.0-alpine"
expose:
- '6379'
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
- redis-data:/data
command:
- redis-server
- /usr/local/etc/redis/redis.conf
hostname: redis
volumes:
redis-data:
ОБНОВЛЕНИЕ
Вот мой redis.conf
, это не так много.
bind 0.0.0.0
appendonly yes
appendfilename "my_app.aof"
appendfsync always
ОБНОВЛЕНИЕ 2
Вещи, которые я заметил и попробовал
в моей первоначальной настройке при запуске docker inspect
Я вижу, что они оба подключены к одной сети. когда я exec
... /bin/bash
в контейнер redis, я могу успешно пропинговать контейнер сервера, но когда я в контейнере сервера, он не может пропинговать контейнер redis.
network_mode: bridge
- добавление, что к обоим контейнерам не работает
Я сделал еще один шаг к ребенку, попробовав это:
server:
network_mode: host
redis:
network_mode: service:host
Я нахожусь Ма c и для того, чтобы заставить работать режим хоста, вам нужно это сделать. Это работает в том смысле, что мой сервер успешно подключается к контейнеру redis. Однако нажатие localhost:3000
не работает, хотя я пересылаю порты