redis

使用docker下载并安装redis

从 Docker Hub 拉取最新的 Redis 镜像,并在后台启动一个名为 redis 的容器,同时将容器的 6379 端口映射到宿主机的 6379 端口。

命令详解

bash

docker run -d --name redis -p 6379:6379 redis
  • docker run:创建并启动一个新容器。
  • -d:后台运行(detached mode)。
  • --name redis:给容器起名叫 redis,方便后续管理。
  • -p 6379:6379:端口映射,格式为 宿主机端口:容器端口。这样你就可以通过宿主机的 6379 端口访问容器内的 Redis。
  • redis:使用的镜像名,如果不指定标签,默认是 latest

运行后你可能还想做这些

1. 检查是否运行成功

bash

docker ps | grep redis

看到状态为 Up 就表示正常。

2. 进入容器测试连接

bash

docker exec -it redis redis-cli

或者直接在宿主机用 redis-cli 连接(需要本地也安装了 Redis 客户端)。

3. 启用持久化(重要)
默认情况下,容器删除后 Redis 的数据也会丢失。建议挂载一个本地目录或数据卷来保存数据:

bash

docker run -d \
  --name redis \
  -p 6379:6379 \
  -v /你的本地路径/data:/data \
  redis redis-server --appendonly yes
  • -v /你的本地路径/data:/data:把容器的 /data 目录挂载到宿主机,RDB 和 AOF 文件就会存在这里。
  • redis-server --appendonly yes:开启 AOF 持久化(生产环境推荐)。

4. 设置密码

bash

docker run -d \
  --name redis \
  -p 6379:6379 \
  redis redis-server --requirepass 你的密码

连接时就需要使用 AUTH 密码 验证。

5. 使用自定义配置文件

bash

docker run -d \
  --name redis \
  -p 6379:6379 \
  -v /宿主机/redis.conf:/usr/local/etc/redis/redis.conf \
  redis redis-server /usr/local/etc/redis/redis.conf

先把官方配置下载到宿主机,根据需要修改后再挂载进去。

常用管理命令

  • 停止容器:docker stop redis
  • 启动已存在的容器:docker start redis
  • 查看日志:docker logs redis
  • 删除容器(先停止):docker rm redis

下载成功后,容器状态is not running

1. 查看容器状态

运行以下命令,看看容器的当前状态和退出代码:

bash

docker ps -a --filter name=redis

你会看到类似这样的输出:

text

CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS                     PORTS     NAMES
cac75572ece6   redis     "docker-entrypoint.s…"   2 hours ago   Exited (1) 2 minutes ago             redis

STATUS 一栏会显示 Exited 和退出码,这能提示容器退出的原因。


2. 查看日志,定位退出原因

bash

docker logs redis

常见的原因有:

  • 端口冲突:宿主机的 6379 端口已被占用。
    • 解决方法:换一个宿主机端口,比如 -p 6380:6379,或者关掉占用端口的程序。
  • 配置错误:如果你挂载了配置文件,但里面写了错误的参数。
  • 权限问题:挂载的数据目录权限不足。
  • Redis 启动失败:可能因为内存或资源限制。

3. 尝试重启容器

如果日志没有明显错误,只是意外停止,可以试试:

bash

docker start redis

然后立即用 docker ps 看它是否保持运行。如果又立刻退出,还是需要看日志。


4. 彻底重建(推荐)

因为 Redis 容器通常是无状态的,直接删除后重装最省事:

bash

# 先停止并删除旧容器(数据会丢失,除非之前挂载了卷)
docker rm -f redis

# 重新运行,记得加上持久化和密码(重要!)
docker run -d \
  --name redis \
  -p 6379:6379 \
  -v /你的自定义路径/redis-data:/data \
  redis redis-server --appendonly yes --requirepass 你的密码
  • -v 挂载的目录请替换为你宿主机上的一个绝对路径,比如 /home/user/redis-data。这样即使容器被删除,数据也会保留。
  • 需要免密连接就删掉 --requirepass 你的密码

容器 redis 的状态是 Created,而不是 Up

容器 redis 的状态是 Created,而不是 Up(运行中)。
而另一个容器 travel_redis 已经占用了宿主机的 6379 端口

因为一个端口只能被一个进程监听,所以当你 docker run -p 6379:6379 时,新的容器因为端口冲突无法启动,就一直卡在 Created 状态,而没有进入运行。


处理方式(三选一)

✅ 方案一:直接使用已经在运行的 travel_redis

它已经跑了 2 天,端口也是 6379,直接用就行了:

bash

docker exec -it travel_redis redis-cli

如果它之前没设密码,进去就能用。有密码的话,用 AUTH 密码 或者连接时加 -a 参数:

bash

docker exec -it travel_redis redis-cli -a 你的密码

这个方案最简单,不用动任何东西。


🔄 方案二:停掉旧的 travel_redis,启动新的 redis 容器

如果你想统一命名,或者想用最新版 Redis 镜像,可以这样做:

bash

# 1. 停止并删除旧的 travel_redis(注意:数据可能丢失,除非它之前挂载了卷)
docker stop travel_redis
docker rm travel_redis

# 2. 删除处于 Created 状态的 redis 容器
docker rm redis

# 3. 重新运行你想要的 redis 容器(建议开启持久化和设置密码)
docker run -d \
  --name redis \
  -p 6379:6379 \
  -v /你的宿主机路径/redis-data:/data \
  redis redis-server --appendonly yes --requirepass 你的密码

这样 docker exec -it redis redis-cli 就能正常工作了。


🔀 方案三:保留 travel_redis,给新容器换一个宿主机端口

如果你两个都需要(比如一个测试、一个正式),可以换个端口:

bash

# 先删除无法启动的 redis 容器
docker rm redis

# 使用其他宿主机端口,比如 6380
docker run -d \
  --name redis-test \
  -p 6380:6379 \
  redis

连接时指定端口即可:

bash

docker exec -it redis-test redis-cli
# 或者从宿主机连接:redis-cli -p 6380

📌 补充:关于数据安全

  • 目前运行的 travel_redis 如果没有挂载卷,一旦删除,里面的数据就没了。可以用 docker inspect travel_redis | grep Mounts -A 10 查看是否有挂载。
  • 新创建的容器也建议按照之前提过的方式,挂载数据目录并开启 AOF 持久化。

控制台输出多个redis状态

1. 查看 travel_redis 的详细信息

bash

docker inspect travel_redis

这会输出一个很长的 JSON,你可以重点关注这几个字段:

  • Created:容器创建时间。
  • Config.Image:使用的镜像(这里是 redis:7-alpine)。
  • Config.Cmd:启动命令,看是否设置了密码或持久化参数。
  • Mounts:挂载了哪些目录,如果有挂载,说明数据存在宿主机上,删除容器数据不会丢。
  • NetworkSettings.Networks:它加入了哪个网络,可能跟某个项目一起使用。

如果你想快速提取关键信息,可以用格式化输出:

bash

docker inspect --format '{{.Created}} {{.Config.Image}} {{.Mounts}}' travel_redis

2. 看它是不是 Docker Compose 启动的

检查一下它是否属于某个 Compose 项目:

bash

docker inspect travel_redis | grep -i compose

如果输出里有 com.docker.compose.project 之类的标签,说明它是通过 docker-compose up 启动的,项目名可能就是 travel

你也可以看看有没有正在运行的 Compose 项目:

bash

docker ps --filter "label=com.docker.compose.project"

3. 确认里面有没有重要数据

先连进去看看有没有键:

bash

docker exec -it travel_redis redis-cli

进去后执行:

text

KEYS *

如果有重要数据,可以把它持久化下来(假设没有挂载卷,但数据还在容器内):

bash

# 在容器内触发一次 RDB 保存
docker exec travel_redis redis-cli BGSAVE
# 然后把这个快照拷贝到宿主机
docker cp travel_redis:/data/dump.rdb ./travel-redis-backup.rdb

4. 决定保留还是删除

  • 如果确认它没用(比如是之前测试留下的),直接停掉并删除,然后使用你自己的新容器:

    bash

    docker stop travel_redis && docker rm travel_redis
    docker rm redis   # 删除那个卡在 Created 状态的新容器
    docker run -d --name redis -p 6379:6379 -v /你自定义的路径/data:/data redis redis-server --appendonly yes --requirepass 你的密码
    
  • 如果它可能属于某个项目,而且那个项目你可能还会用,建议保留它,换个端口启动自己的 Redis(比如 -p 6380:6379),互不干扰。

确认是由 docker-compose 项目 travel-platform 启动

确认 travel_redis 是由 docker-compose 项目 travel-platform 启动的,那说明它很可能还在被某个应用依赖,不能直接停掉或删除,否则会影响那个平台。

你现在最稳妥的做法是:保留 travel_redis,给自己的学习或测试换一个端口,互不干扰。


🛠 具体操作步骤

1. 清理掉那个创建失败的新容器(状态是 Created 的那个)

bash

docker rm redis

2. 重新创建你自己的 Redis 容器,宿主机端口换成其他(如 6380)

bash

docker run -d \
  --name redis \
  -p 6380:6379 \
  redis redis-server --appendonly yes --requirepass 你的密码
  • -p 6380:6379:把宿主机的 6380 端口映射到容器的 6379,这样就不会和 travel_redis 的 6379 冲突。
  • 你可以根据自己的需要决定是否加密码和持久化参数,上面的命令已包含 AOF 持久化和密码。

3. 连接你自己的 Redis

bash

# 用容器内的客户端连接
docker exec -it redis redis-cli -a 你的密码

# 或者从宿主机用客户端连接(需要本地有 redis-cli)
redis-cli -p 6380 -a 你的密码

💡 如果你只是想临时用一下 Redis

也可以直接使用已有的 travel_redis,它已经在运行并且端口是 6379,免去了自己再装一个的麻烦。
先看看它有没有设密码(通常 Docker Compose 项目会在环境变量或配置文件里设置):

bash

docker exec -it travel_redis redis-cli

如果提示 NOAUTH Authentication required,说明有密码,你需要去 travel-platform 项目的 docker-compose.yml 文件里查找 REDIS_PASSWORD 或类似的字段。
如果进去后显示 127.0.0.1:6379>,那就直接可用,密码为空。

但要注意:这个 Redis 是 travel-platform 的一部分,有可能被项目自动管理(比如重启、删除数据卷等),最好不要在里面存你自己的重要数据。


🔄 如果你想彻底拥有自己的 Redis,同时停掉旧项目

前提是你确认 travel-platform 已经不再需要。操作前最好先备份一下它的数据(见上一轮的 BGSAVEdocker cp 方法)。

进入 travel-platform 项目目录(包含 docker-compose.yml 的文件夹),然后执行:

bash

docker-compose down   # 停止并删除该项目所有容器和网络

之后宿主机 6379 端口就释放了,你就可以按最初的命令在 6379 端口上启动自己的 Redis 了。

posted on 2026-06-01 10:27  yunkuang  阅读(46)  评论(0)    收藏  举报