Home > Software design >  How to setup Docker container with Redis (Stack) server to use a configuration file?
How to setup Docker container with Redis (Stack) server to use a configuration file?

Time:10-19

I need to run a Docker container with Redis Stack pre-configured to use a config file and ACL file. My Dockerfile (placed in the same folder as the redis.conf and users.acl) is as follows:

FROM redis/redis-stack:latest
WORKDIR /db
COPY redis.conf ./redis-stack.conf
COPY users.acl ./users.acl
ENV PORT=6379
EXPOSE 6379

I run the container with docker run -p 6379:6379 --mount type=volume,source=database-vol,target=/db,readonly=0 container_name, using a named volume.

After this, the Redis server starts, but instead of using these config/acl files, uses a default .conf, seemingly placed in the /opt/redis-stack/etc folder. Using COPY in the Dockerfile to place my files in that folder instead doesn't help: the files are there, but the server doesn't use them: redis-cli command acl list returns the default user only, meaning my .conf file is ignored.

I understand there is a possibility to pass arguments in docker run with --env REDIS_ARGS="", but I am not sure if/which arguments would setup the configuration file.

How do I point the redis server in the container to use my files? Is it possible for them to be in an arbitrary location?

CodePudding user response:

Location of acl file is configured with aclfile parameter.

So, based on your Dockerfile, adding --env REDIS_ARGS="envfile /db/users.acl" should do the trick.

Somehow related, pass arguments via the command line

CodePudding user response:

After some trying, figured it out. redis-stack-server (or redis-server if you're using the non-stack image) executable is already configured in PATH, so it's possible to CMD or RUN it easily from the Dockerfile.

To run the server with the given config file, I use CMD [ "redis-stack-server", "redis.conf" ]. The full Dockerfile is then as follows:

FROM redis/redis-stack:latest 

WORKDIR /usr/local/db

COPY redis.conf ./redis.conf
COPY users.acl ./users.acl

ENV PORT=6379
EXPOSE 6379

CMD [ "redis-stack-server", "redis.conf" ]

This will start the Redis Stack server with the given configuration, as well users provided in the ACL file.

  • Related