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

Docker Redis使用Unix套接字启动报错:Failed opening Unix socket: bind: Address in use

解决Redis容器Unix套接字绑定失败(Address in use)的问题

问题原因

你当前的配置直接将宿主机的/var/run/redis.sock文件挂载到容器内同一路径,会触发两种导致报错的情况:

  1. 宿主机不存在该文件时,Docker会自动创建一个普通文件,Redis尝试创建Unix套接字时,因路径已被普通文件占用而失败。
  2. 若之前容器启动过,宿主机残留了旧的套接字文件,Redis无法重复绑定该路径。

解决方案

步骤1:清理残留文件(若存在)

先删除宿主机上可能存在的redis.sock文件:

rm -f /var/run/redis.sock

步骤2:修改Docker Compose配置

不要直接挂载套接字文件,改为挂载目录,让Redis在容器内的目录中创建套接字。修改后的docker-compose.yml:

services:
  redis:
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    container_name: redis
    image: redis:alpine
    restart: unless-stopped
    volumes:
      - ./conf:/usr/local/etc/redis
      - ./redis-sock:/var/run/redis  # 挂载目录而非文件

# 若使用命名卷替代绑定挂载,可添加以下部分(可选,更适合生产环境)
# volumes:
#   redis-sock:

步骤3:更新Redis配置

修改./conf/redis.conf中的套接字路径,指向容器内的挂载目录:

unixsocket /var/run/redis/redis.sock
unixsocketperm 777  # 根据需求调整权限,确保宿主机服务能访问套接字

步骤4:启动容器

重新启动容器即可:

docker-compose up -d

此时,宿主机的./redis-sock目录下会生成redis.sock套接字文件,其他服务直接通过./redis-sock/redis.sock路径即可连接Redis。

若使用命名卷,可通过以下命令查看套接字的宿主机路径:

docker volume inspect redis-sock

输出中的Mountpoint字段即为宿主机上的套接字所在目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:52:39