Never mind, it seems to be working now. Problem had to do with figuring out the correct host to supply to the Redis client in Node. Please delete.
I’m using Docker Toolbox. For the life of me I can’t get Redis to work with Docker-Compose.
First I tried to dockerize a complex app of mine that works perfectly in a local environment. Redis didn’t work with that docker-compose. When Node/Express reaches out to get data from Redis it doesn’t do anything. No errors, it’s just never able to get any set data in the cache. The other parts of the app work fine, like PostgreSQL. The Redis initialization output stops at these lines:
redis_1 | 1:C 12 Jan 2019 00:33:34.486 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 12 Jan 2019 00:33:34.486 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=1, just started
dockertest_1 | wait-for-it.sh: waiting 15 seconds for redis:6379
redis_1 | 1:C 12 Jan 2019 00:33:34.486 # 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 12 Jan 2019 00:33:34.489 * Running mode=standalone, port=6379.
redis_1 | 1:M 12 Jan 2019 00:33:34.490 # 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 12 Jan 2019 00:33:34.490 # Server initialized
redis_1 | 1:M 12 Jan 2019 00:33:34.490 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
redis_1 | 1:M 12 Jan 2019 00:33:34.491 * DB loaded from disk: 0.000 seconds
dockertest_1 | wait-for-it.sh: redis:6379 is available after 0 seconds
It never says “ready to accept connections” or whatever Redis usually says.
So I tried using a bare-bones NodeJS / Express app to see if I’m missing something in the complexity, all it does is start the app and put a string into Redis and try to take it out a few seconds later, but it doesn’t work there either. It doesn’t throw an error about not being able to connect to Redis. It does if I put in the wrong host.
Dockerfile
FROM node:10.15.0-alpine
WORKDIR /usr/src/app
COPY [“package.json”, “package-lock.json*”, “./”]
RUN apk update && apk add bash
RUN npm install
COPY . .
EXPOSE 4000
docker-compose
version: ‘3’
services:
dockertest:
image: dockertest
build: .
ports:
- “4000:4000”
networks:
- default
command: ‘./wait-for-it.sh redis:6379 – npm start’
depends_on:
- redis
redis:
image: ‘redis:alpine’
environment:
- REDIS_HOST=redis
ports:
- “6379:6379”
networks:
- default
Node app
const express = require(‘express’);
const redis = require(‘redis’);
const redisClient = redis.createClient({ host: ‘redis’ });const app = express();
setTimeout(() => {
redisClient.set(‘abc’, ‘defg’, ‘EX’, ‘30’);
console.log(‘Set value’);setTimeout(() => {
redisClient.get(‘abc’, (val) => {
if (!val) {
console.log(“Didn’t work again”);
}
console.log('Got value: ', val);
});
console.log('Val2: ', val2);
console.log(‘poo’)
}, 3000);
}, 3000)app.listen(4000, () => {
console.log(“Server’s up”)
})
I tried with and without volumes set up, conf files included, both wait-for-it and wait-for, and I’m about ready to give up on Docker.