【Docker部署】Docker-compose部署redis容器及启动失败、挂载失败等问题

20 篇文章 0 订阅
11 篇文章 2 订阅

前言

     最近在尝试用docker部署项目,在尝试启动Redis容器时各种起不来,卡了一段时间,特此记录下解决过程。

Docker-compose部署redis的正确方式

Docker-compose.yml 文件

services:
  redis:
    image: redis:6.2
    container_name: redis6
    restart: always
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "6378:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
      - ./data:/data:rw
      - ./logs:/logs
    command:  redis-server /usr/local/etc/redis/redis.conf --requirepass "123456"

文件目录结构

在这里插入图片描述

说明:

文件名描述
redis.cnf配置文件
data数据文件目录
docker-compose.yml用来启动redis容器
logs日志文件目录

redis.conf 关键信息

# bind 127.0.0.1
daemonize no
logfile /logs/redis.log
appendonly yes

说明:

配置项描述
bind指定本机网卡对应的IP地址,限制本机访问,默认 bind 127.0.0.1
daemonize指定是否为守护进程方式运行,默认值为no
logfile指定日志文件路径,默认值为 logfile ’ ', 默认为控制台打印,并没有日志文件生成
appendonly是否开启持久化,默认值为no

docker-compose 启动

# 前台启动容器,控制台会打印容器启动的日志信息,方便看异常信息
docker-compose up 

在这里插入图片描述

启动后用redis-cli连接server

在这里插入图片描述

     至此,一切顺利的话,redis服务就成功启动啦!

问题列表

redis启动失败

在这里插入图片描述
     redis 启动失败,status 在不断的重启中,端口连接失败。
在这里插入图片描述

原因 & 解决方案

     redis.conf 中设置了 daemonize yes

     当daemonize 设置了yes,表示redis在后台运行,当执行docker-compose执行启动redis进程时,docker发现自己无事可做,容器自动结束,所以导致redis启动失败。

误打误撞地启动成功了

在这里插入图片描述
配置信息:
redis.conf 中 daemonize yes
docker-compose.yml:
在这里插入图片描述
目录结构:
在这里插入图片描述
可以看到新增redis目录,并且新增redis目录下 redis.conf 文件大小为0;
在这里插入图片描述
我分析启动成功的原因是在设置挂载目录时,设置了一个不存在的/redis/xx的目录,同样/redis/redis.conf 也不存在,推测可能是redis在启动的时候找不到配置文件,用了内置的默认文件,启动成功了~ 噗~

redis /data 数据目录挂载失败

     观察到的现象是设置了appendonly=yes ,正常情况下会在data目录下生成appendonly.aof,但是在宿主机的data目录下未发现任何文件,这时候看redis日志如下:
在这里插入图片描述

原因

     对于appendonly.aof文件没有写的权限

设置权限的两种方式

  • 在宿主机的挂载目录下设置读写权限和操作用户组
  • 在volumes 中设置读写权限

1、在宿主机的挂载目录下设置读写权限和操作用户组

sudo chown 999:999 /data
sudo chmod 777 /data

在这里插入图片描述

2、在volumes 中设置读写权限

volumes:
      - ./data:/data:rw

进入容器查看/data目录权限:
在这里插入图片描述
在宿主机查看/data 目录:
在这里插入图片描述

小结

     平时对于组件中间件的信息拿来就用,了解的少,思考的也少,导致了一个又一个的问题,希望自己越来越专业~

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Docker-composeDocker 官方提供的一个工具,用于定义和运行多个 Docker 容器的应用程序。使用 Docker-compose 部署 Redis,可以快速、方便地创建和管理 Redis 容器。 以下是使用 Docker-compose 部署 Redis 的步骤: 1. 安装 DockerDocker-compose。 2. 创建一个名为 docker-compose.yml 的文件,并在其中定义 Redis 容器的配置。例如: ``` version: '3' services: redis: image: redis:latest ports: - "6379:6379" ``` 3. 在终端中进入 docker-compose.yml 文件所在的目录,运行以下命令启动 Redis 容器: ``` docker-compose up -d ``` 4. 等待一段时间,直到 Redis 容器启动完成。可以使用以下命令查看容器状态: ``` docker-compose ps ``` 5. 使用 Redis 客户端连接 Redis 容器。例如: ``` redis-cli -h localhost -p 6379 ``` 6. 在 Redis 容器中执行 Redis 命令。例如: ``` set mykey "Hello World" get mykey ``` 以上就是使用 Docker-compose 部署 Redis 的基本步骤。需要注意的是,这只是一个简单的示例,实际应用中可能需要更复杂的配置。 ### 回答2: Docker-ComposeDocker官方提供的一个类似于编排工具的东西,通过yaml文件来管理多个容器的启动和连接,非常适合进行多容器的本地开发和测试。 Redis是一个非关系型数据库,被广泛用于缓存系统和分布式存储系统中。使用Docker-Compose可以快速部署Redis集群,以下是具体步骤: 1. 确认本地已经安装了DockerDocker-Compose。 2. 创建一个docker-compose.yaml文件,内容如下: version: '3' services: redis-master: image: 'redis:6.2.5-alpine' container_name: 'redis-master' ports: - '6379:6379' redis-slave: image: 'redis:6.2.5-alpine' container_name: 'redis-slave' ports: - '6380:6379' command: redis-server --slaveof redis-master 6379 在这个文件中,我们有两个服务:redis-master和redis-slave。redis-master将在启动时创建一个Redis实例,redis-slave将在启动时连接到redis-master,并成为redis-master的副本。 3. 打开命令行终端,导航到docker-compose.yaml所在的目录,并启动服务: $ docker-compose up 这将在终端中输出服务启动日志。 4. 验证Redis集群是否成功启动。我们可以使用Redis客户端来连接到Redis实例并执行一些基本命令: $ redis-cli -p 6379 127.0.0.1:6379> set mykey "Hello Redis" OK 127.0.0.1:6379> get mykey "Hello Redis" 127.0.0.1:6379> 在这个例子中,我们使用redis-cli连接到redis-master并将“Hello Redis”设置为名为“mykey”的值,然后再次连接到redis-master以确保该值已正确存储。 通过以上步骤,就可以使用Docker-Compose部署Redis集群,非常简单方便。同时,由于使用了Docker,可以实现快速的容器部署,大大提高了开发和部署的效率。 ### 回答3: Docker-Compose是一种方便的工具,可以使Docker容器化的部署更加容易。在这里,我们将介绍如何使用Docker-Compose部署RedisRedis是一个高性能的开源键值存储数据库,广泛用于缓存,队列和实时分析等方面。 首先,我们需要编写一个docker-compose.yaml文件来定义Redis容器的配置。我们需要定义一个Redis服务,指定容器的名称,所需的镜像,端口映射,以及其他必要的配置项。示例如下: ```yaml version: '3' services: redis: image: redis:latest container_name: myredis restart: always ports: - 6379:6379 ``` 在这个配置中,我们定义了一个名为redis的服务,基于redis:latest镜像启动。我们映射主机的6379端口到容器的6379端口,使得外部应用可以连接到Redis服务。另外,我们指定了容器重启策略,当容器异常退出时,会自动重新启动。 接下来,使用docker-compose命令行工具来启动Redis容器: ```bash docker-compose up -d ``` 这个命令将会在后台启动Redis服务,并输出容器的运行日志。我们可以用docker-compose ps命令查看容器的状态: ```bash docker-compose ps ``` 如果一切正常,我们应该能看到容器正在运行中。然后,我们可以使用任何适当的Redis客户端连接到Redis服务: ```bash redis-cli 127.0.0.1:6379> ping PONG ``` 到此,我们已经成功地使用Docker-Compose部署Redis服务。使用Docker-Compose的优点包括:一键启动一个完整的Redis服务,可自定义容器配置和参数,方便协作和分享等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大白啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值