You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用docker-compose加载自定义配置启动Redis报错:无法切换到/var/lib/redis目录

Fixing "Can't chdir to '/var/lib/redis': No such file or directory" When Using Custom Redis Config with Docker Compose

Hey, I’ve run into this exact issue before—let’s break down what’s going on and how to fix it quickly.

Why This Happens

When you don’t mount a custom config, the official Redis image uses its default settings, which include a pre-created directory (usually /data or /var/lib/redis, depending on the image version) with the correct permissions for the Redis user to access.

But when you mount your own redis.conf, Redis tries to follow the dir directive in your config (this is the directory where Redis stores persistent data like RDB/AOF files). If that directory doesn’t exist in the container, or the Redis process doesn’t have permission to access it, you’ll get that "Can't chdir" error.

Step-by-Step Fixes

1. Check Your Custom redis.conf’s dir Setting

First, open up your custom config file and look for the dir line:

dir /var/lib/redis
  • Option 1: Switch to the default directory
    The official Redis image pre-creates /data with proper permissions. Change the dir line to:

    dir /data
    

    This is the simplest fix if you don’t have a specific reason to use /var/lib/redis.

  • Option 2: Keep /var/lib/redis but ensure it exists
    If you need to stick with /var/lib/redis, you’ll need to make sure the directory exists in the container and has the right permissions.

2. Create the Directory in Docker Compose

If you’re keeping /var/lib/redis, modify your docker-compose.yml to create the directory and set permissions before starting Redis. Add a custom command to handle this:

services:
  redis:
    image: redis
    volumes:
      - ./redis.conf:/etc/redis/redis.conf  # Your custom config
      - redis-data:/var/lib/redis            # Persist data with a named volume
    command: sh -c "mkdir -p /var/lib/redis && chown redis:redis /var/lib/redis && redis-server /etc/redis/redis.conf"

The sh -c command runs three steps: creates the directory, sets ownership to the Redis user (used by default in the image), then starts Redis with your config.

3. Fix Permissions If Mounting a Host Directory

If you’re mounting a local host directory to /var/lib/redis (like - ./local-redis-data:/var/lib/redis), fix the permissions on your host machine first:

# Create the directory if it doesn't exist
mkdir -p ./local-redis-data
# Set ownership to match the Redis user's UID/GID in the image (usually 999:999)
chown 999:999 ./local-redis-data

This ensures the Redis process inside the container can read/write to the mounted directory.

4. Compare Your Config to the Default

If none of the above works, compare your custom redis.conf to the official default config (you can get it by running docker run --rm redis cat /etc/redis/redis.conf). Look for other path-related settings (like pidfile) that might point to non-existent directories—sometimes those can trigger similar errors too.

Wrap-Up

9 times out of 10, this error comes down to the dir setting in your custom config pointing to a directory that doesn’t exist or has bad permissions. Start with checking that line, then adjust your Docker Compose setup to create/secure the directory, and you’ll be up and running in no time.

内容的提问来源于stack exchange,提问作者AAA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:23:17