常用docker命令:
docker ps 命令用于列出当前正在运行的容器。如果你想查看所有容器(包括已停止的),可以使用 docker ps -a
重启容器 docker restart 容器名/容器id
启动容器 docker start 容器名/容器id
注意点:
1. daemonize yes
- 问题: 在 Docker 中运行 Redis 时,不应该使用
daemonize yes。Docker 容器期望应用程序在前台运行,而daemonize yes会使 Redis 作为一个守护进程在后台运行,导致容器立即退出。 - 解决方案: 删除或注释掉
daemonize yes这一行,或者改为daemonize no
2. requirepass 和 masterauth
- 问题:
requirepass和masterauth都被设置为相同的密码,这可能会导致混淆。 - 解决方案: 确保
masterauth和requirepass设置正确,通常它们应该相同
3. replicaof 配置
- 问题: `replicaof 主机ip 主机端口号
--privileged=true 给容器内root权限
--restart=always 随docker自启动 (--restart=no 关闭随docker自启动)
部署遇到问题:
could not connect to Redis at 192.168.80.131:6380: Connection timed out
遇到“could not connect to Redis at 192.168.80.131:6380: Connection timed out”错误通常意味着客户端无法与指定的 Redis 服务器建立连接。这可能是由多种原因引起的。以下是一些常见的排查步骤和解决方案:
### 1. **检查网络连接**
确保客户端和服务器之间的网络连接是通畅的。
- **Ping 测试**:
```bash
ping 192.168.80.131
```
如果 ping 不通,说明网络连接有问题。
- **Telnet 测试**:
```bash
telnet 192.168.80.131 6380
```
如果 telnet 无法连接,说明端口可能被防火墙阻拦或服务未启动。
### 2. **检查防火墙设置**
确保防火墙没有阻止 Redis 端口(6380)的流量。
- **检查服务器防火墙**:
```bash
sudo ufw status
sudo iptables -L
```
如果防火墙规则阻止了 6380 端口,可以添加允许规则:
```bash
sudo ufw allow 6380/tcp
sudo iptables -A INPUT -p tcp --dport 6380 -j ACCEPT
```
- **检查客户端防火墙**:
确保客户端的防火墙没有阻止连接到 192.168.80.131:6380。
### 3. **检查 Redis 服务状态**
确保 Redis 服务在服务器上正常运行。
- **查看 Redis 容器状态**:
```bash
docker ps -a
```
确认 `redis-slave1` 容器正在运行。如果没有运行,可以尝试启动它:
```bash
docker start redis-slave1
```
- **查看 Redis 容器日志**:
```bash
docker logs redis-slave1
```
查看日志以获取更多错误信息。
### 4. **检查 Redis 配置**
确保 Redis 配置文件中没有错误,并且监听地址和端口设置正确。
- **检查配置文件**:
确认 `redis_slave1.conf` 文件中的 `bind` 和 `port` 设置正确:
```conf
bind 0.0.0.0
port 6380
```
### 5. **检查 Docker 网络**
确保 Docker 网络配置正确,容器能够相互通信。
- **查看 Docker 网络**:
```bash
docker network ls
docker inspect <network_name>
```
确认网络配置正确。
- **检查容器的 IP 地址**:
```bash
docker inspect redis-slave1 | grep IPAddress
```
确认容器的 IP 地址是否与配置文件中的 IP 地址一致。
### 6. **检查 SELinux(如果适用)**
如果你的系统启用了 SELinux,确保 SELinux 没有阻止 Redis 服务。
- **临时禁用 SELinux**:
```bash
sudo setenforce 0
```
如果问题解决,可以考虑永久修改 SELinux 配置。
### 7. **检查 DNS 解析**
确保 IP 地址解析正确,特别是在使用域名的情况下。
### 示例步骤
1. **Ping 测试**:
```bash
ping 192.168.80.131
```
2. **Telnet 测试**:
```bash
telnet 192.168.80.131 6380
```
3. **检查 Redis 容器状态**:
```bash
docker ps -a
docker logs redis-slave1
```
4. **检查配置文件**:
```bash
cat /home/docker/redis/config/redis_slave1.conf
```
5. **检查 Docker 网络**:
```bash
docker network ls
docker inspect <network_name>
docker inspect redis-slave1 | grep IPAddress
```
通过这些步骤,你应该能够找到并解决连接超时的问题。
成功解决无法通过端口6380、6381连接redis

启动redis命令:
docker run -p 6381:6381 --name iredis \ -v /home/docker/redis/config/redis_slave_6381.conf:/etc/redis/redis_slave_6381.conf \ -v /home/docker/redis/data:/data \ -d redis:6.2.6 redis-server /etc/redis/redis_slave_6381.conf
解释
-
docker run:- 作用: 启动一个新的Docker容器。
-
-p 6381:6381:- 作用: 将主机的6381端口映射到容器的6381端口。
- 解释: 这使得你可以通过主机的6381端口访问容器内部运行的Redis服务。
-
--name iredis:- 作用: 为容器指定一个名称。
- 解释: 容器名称为
iredis,方便后续管理和识别。
-
-v /home/docker/redis/config/redis_slave_6381.conf:/etc/redis/redis_slave_6381.conf:- 作用: 将主机上的配置文件挂载到容器中。
- 解释:
- 主机路径:
/home/docker/redis/config/redis_slave_6381.conf - 容器路径:
/etc/redis/redis_slave_6381.conf - 这样做是为了让容器使用自定义的配置文件。
- 主机路径:
-
-v /home/docker/redis/data:/data:- 作用: 将主机上的数据目录挂载到容器中。
- 解释:
- 主机路径:
/home/docker/redis/data - 容器路径:
/data - 这样做是为了持久化Redis的数据,即使容器停止或删除,数据也不会丢失。
- 主机路径:
-
-d:- 作用: 以分离模式(后台)运行容器。
- 解释: 容器将在后台运行,不会占用终端。
-
redis:6.2.6:- 作用: 指定使用的Docker镜像及其标签。
- 解释: 使用 Redis 镜像的 6.2.6 版本。
-
redis-server /etc/redis/redis_slave_6381.conf:- 作用: 在容器启动时执行的命令。
- 解释: 使用指定的配置文件
/etc/redis/redis_slave_6381.conf启动 Redis 服务器。
总结
这个命令的作用是启动一个名为 iredis 的 Redis 容器,并进行以下配置:
- 将主机的6381端口映射到容器的6381端口。
- 使用自定义的配置文件
/home/docker/redis/config/redis_slave_6381.conf。 - 将主机上的数据目录
/home/docker/redis/data挂载到容器的/data目录,以便持久化数据。 - 以分离模式(后台)运行容器,使用 Redis 6.2.6 镜像。

1230

被折叠的 条评论
为什么被折叠?



