Docker NextCloud Redis缓存配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker NextCloud Redis缓存配置相关的知识,希望对你有一定的参考价值。

参考技术A 转自我的博客:https://sleele.com/2019/04/19/docker-nextcloud-redis缓存配置/

前言

nextcloud这个东西真的是挺慢的,文件一多等刷新都要等很久,如果配置了Redis做缓存就会快不少

搭建过程我就不再赘述了,可以参照我上篇博文

https://sleele.com/2019/03/03/linux-qbittorrent和nextcloud安装笔记/

部署redis

docker run --name redis -d redis

查看docker容器IP

docker inspect --format='.Name - range .NetworkSettings.Networks.IPAddressend' $(docker ps -aq)

之后修改nextcloud的配置文件

首先copy到本地

docker cp nextcloud:/var/www/html/config/config.php /tmp/

vi /tmp/config.php

添加如下内容

找准位置在【'memcache.local' => '\OC\Memcache\APCu',】 这行后面添加

host那行换成你的redis地址

'memcache.locking' => '\OC\Memcache\Redis',

'redis' => array(

    'host' => '172.17.0.5',

    'port' => 6379,

      ),

再copy回去,注意直接copy回去会导致nextcloud报错,需要修改权限

docker cp config.php nextcloud:/var/www/html/config/

docker exec -it nextcloud bash

cd /var/www/html/config/

chmod 777 config.php

重启nextcloud,教程结束

docker restart nextcloud

无法创建服务器 TCP 监听套接字 *:6383 绑定:无法在 docker 上的 redis 集群中分配请求的地址(在 Windows 中)

【中文标题】无法创建服务器 TCP 监听套接字 *:6383 绑定:无法在 docker 上的 redis 集群中分配请求的地址(在 Windows 中)【英文标题】:Could not create server TCP listening socket *:6383 bind: Cannot assign requested address in redis clustering on docker (in windows) 【发布时间】:2021-12-15 15:05:50 【问题描述】:

我正在尝试在 windows docker 上设置 redis 集群。 它只能在 redis-cli -h 127.0.0.1 -p 6383 inside docker container CLI 中正常工作,所有节点都很好,集群没有问题。这是 redis.config 文件节点之一

redis.config 文件

port 6383
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf 
cluster-node-timeout 5000
appendonly yes

问题出在上面的配置,应用无法访问集群,因为应用无法访问集群(这个应用在redis单模式下运行正常)

当我将“绑定”redis.conf 文件更改为我的计算机 IP 192.168.3.205 时,我收到此错误 enter image description here

我尝试了以下方法:

    在防火墙卷中打开上述端口 使用 telnet 命令似乎没有人在此端口上监听

远程登录 192.168.3.205 6383 和 127.0.0.1 6383

    netstat prot 6383 未被任何人使用

这是我的 .yml 文件

version: "3.8"

networks:
  default:
    name: amin-cluster

services:
  redis0:
    container_name: node-0
    image: mnadeem/redis 
    network_mode: "host"
    volumes:
    - C:\Windows\System32\6379\redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    build:
      context: .
      dockerfile: Dockerfile
    hostname: node-0
    restart: always
  redis1:
    container_name: node-1
    image: mnadeem/redis 
    network_mode: "host"
    volumes: 
    - C:\Windows\System32\6380\redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    build:
      context: .
      dockerfile: Dockerfile
    hostname: node-1
    restart: always
  redis2:
    container_name: node-2
    image: mnadeem/redis 
    network_mode: "host"
    volumes: 
    - C:\Windows\System32\6381\redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    build:
      context: .
      dockerfile: Dockerfile
    hostname: node-2
    restart: always
  redis3:
    container_name: node-3
    image: mnadeem/redis 
    network_mode: "host"
    volumes:
     - C:\Windows\System32\6382\redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    build:
      context: .
      dockerfile: Dockerfile
    hostname: node-3
    restart: always
  redis4:
    container_name: node-4
    image: mnadeem/redis 
    network_mode: "host"
    volumes:
    - C:\Windows\System32\6383\redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    build:
      context: .
      dockerfile: Dockerfile
    hostname: node-4
    restart: always
  redis5:
    container_name: node-5
    image: mnadeem/redis 
    network_mode: "host"
    volumes: 
    - C:\Windows\System32\6384\redis.conf:/usr/local/etc/redis/redis.conf
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    build:
      context: .
      dockerfile: Dockerfile
    hostname: node-5
    restart: always

【问题讨论】:

你能说明你是如何启动容器的吗?您很可能忘记发布端口(将主机端口绑定到容器端口) @Matthew 我在 redis.conf 文件中设置了端口,然后我使用 ">docker-compose up -d " 我需要在其他地方设置端口还是我想如何告诉容器从特定端口开始。在单模式下,我选择容器的图像名称,并告诉端口如 6060:6379 但这里我不知道 我添加了一个应该有帮助的答案,redis 团队自己提供的标准 redis 图像也非常可靠,使用 3rd 方图像有什么特别的理由吗? (mnadeem/redis),编辑:nvm 我看到这些图像是针对集群的。 @Matthew 抱歉,我在其文档中找不到 docker 的任何集群配置。我还在努力我似乎被卡住了你有什么指导可以使用这个标准的 Redis 映像在 docker 上实现 Redis 集群吗? 不确定,但如果您需要更多帮助,您应该问第二个问题。对于访问端口的紧迫问题,我提供的答案是否解决了问题? 【参考方案1】:

在您的 docker compose yml 中,您需要发布端口,并为您希望从主机访问的每个服务设置一个。

redis0:
    ports:
      - "6383:6383"
    ...
redis1:
    ports:
      - "12345:6383"

语法是“hostport:containerport”,因为您有 6 个 redis 实例,假设您希望每个可访问的每个主机端口都需要不同。

如果您不需要从主机访问端口,您显然可以省略端口。

有关如何发布端口的更多详细信息,请阅读 docker compose yml docs https://docs.docker.com/compose/compose-file/compose-file-v3/#ports

【讨论】:

谢谢你,我通过了这个问题,但不是完全。尝试使用命令“redis-cli --cluster create : ...”配置节点时,我遇到了另一个问题,自动分配像 172.21.0.1 这样的 IP,而不是我给它的 IP跨度> @aminrahmati 我建议你解决这个问题并为你的新问题创建一个新问题。 *** 最适合在提出特定问题并获得特定答案时使用,并且通过对现有问题提出后续问题,您很可能不会获得很大的吸引力。

以上是关于Docker NextCloud Redis缓存配置的主要内容,如果未能解决你的问题,请参考以下文章

云原生之Docker实战使用Docker部署个人网盘nextcloud

Nextcloud 与 Docker:无法创建或写入数据目录

Docker部署私有网盘NextCloud

Nextcloud 未连接到 Redis

使用docker-compose安装Nextcloud

使用docker-compose安装Nextcloud